1.概念
ado.net entity framework 是微软以ado.net entityframework为基础所发展出来的对象关系对应的解决方案,早期被称为objcetSpace,现已经包含在Visual studio8 Service Pacek1ji以及.net FrameEWork3.5 ServcePack1中发表。
ado.net entity framework以EntityData Model(EDM)为主,将数据逻辑层切分分为三块,分别 Conceptual Schema, Mapping Schema 与 Storage Schema 三层。
在4.1的EntityFramework中,支持开发者先创建实体类模型类,然后在根据实体相关的属性生成相关的数据库文件。这种方法对于开发者来说是很有好处的,首先,会让开发者从面向对象的思维角度出发,去构建业务逻辑中的实体模型,然后再根据实际的需要去生成数据库文件,是真正的面向对象的思维开发方法。
4.1EntityFramework增加了DbContext,连接中有详细的说明。
下载地址: Entity Framework 4.1
2.步骤:
一、建一个c#语言的WindowsFormsApplication项目工程命名为EntityFrameworkTest;
二、增加一个新类Producer.cs,
public class Producer
{
public int ID { get; set; }
public Tool tool { get; set; }
public string ProducerName { get; set; }
public double ItemCode { get; set; }
}
在我们的类中,有id这个属性,Entity框架会根据id这个属性,去生成数据库表中的对应字段id,如果类中没定义id这个属性,则会在数据库表文件中生成以“类文件名+ID”这样命名的字段。
增加一个类Tool.cs
public class Tool
{
public int ID { get; set; }
public DateTime Time { get; set; }
public double Total { get; set; }
public ICollection<Producer> Prodcers { set; get; }
public Tool()
{
Prodcers = new List<Producer>();
}
}
两个类中互相的应用将在自动创建数据库是创建内外健关系。
三、在项目中添加引用:
如图:
四、添加一个执行将模型转换数据库文件的类命名为:DoneTest.cs
引入命名空间:using System.Data.Entity;
public class DoneTest : DbContext
{
public DbSet<Tool> DBTools { set; get; }
public DbSet<Producer> DBProducer { set; get; }
}
在form1中添加如图控件:
代码如下:
引入命名空间:using System.Data.Entity;
/// <summary>
/// 查询
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
IQueryable<Tool> rs = from t in done.DBTools select t;
dataGridView1.DataSource = rs.ToList();
}
}
/// <summary>
/// 添加
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
using (DoneTest done = new DoneTest())
{
Tool t = new Tool()
{
Time=DateTime.Now,
Total = 2000
};
done.DBTools.Add(t);
done.SaveChanges();
}
}
五、配置app.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="DoneTest" providerName="Sql.Data.SqlClient" connectionString="server=localhost;Persist Security Info=True;user id=root;password=admin;database=DoneTest"/>
</connectionStrings>
</configuration>
这个地方要注意:database的名字必须和定义的doneTest这个类名称一样;
在form1执行查询和添加,如果sqlserver没有此数据库将创建一个和doneTes一样名称的数据库,并且按照数据体创建对应的数据库,如果存在就将数据数据添加到数据库中。
修改数据代码:
using (DoneTest done = new DoneTest())
{
Tool t = new Tool()
{
id=1,
Total = 2000
};
db.Entry(t).State = EntityState.Modified;
done.SaveChanges();
}
删除代码:
using (DoneTest done = new DoneTest())
{
Tool t = new Tool()
{
id=1,
Total = 2000
};
db.Entry(t).State = EntityState.Delele;
done.SaveChanges();
}