九、 实体框架(Entity Framework)
1. 术语
模型:数据模型,用于生成源代码类,xml保存
实体(entity):数据记录、行,对应于DataRow。
实体集合(entities):对应于DataTable。
属性:对应于字段。
关联:对应于DataRelation,但是双向访问的。
导航属性:对应于外键关联(导航)。
实体集:对应于表、视图。
2. 层次
A. 概念层
概念架构定义语言(CSDL)定义,xml格式,.csdl文件。
B. 存储层
也称逻辑层,标明数据库级元素。存储架构定义语言(SSDL)定义,xml格式,ssdl文件。
C. 映射层
连接概念层与存储层,使用映射规范语言(MSL)做映射,指明概念模型中的实体、属性和关联如何绑定到存储模型中的特定项目。.msl文件描述。
3. 使用步骤
A. 构建模型
Visual Studio利用向导,生成.edmx文件,包含上述三层文件内容。
B. 从模型生成对象
C. 实例化上下文
上下文用于访问模型内容,是System.Data.Ojbects.ObjectContext的实例,是<EntityContainer>的实例化。
4. 向导设计模型
为项目添加“ ADO.NET实体数据模型”项(注Visual Studio 2010实体框架生成工具支持SQL Server 2005及更高版本数据库):
更改模型不会传回底层数据库。改后保存项目,可重新生成对象层。
数据库有变动,更新模型,右击模型空白处:

5. 数据查询
using (UserEntities context = new UserEntities())
{
ObjectSet<tb_User> results = context.tb_User;
foreach (tb_User user in results)
{
Console.WriteLine("name: " + user.Username);
Console.WriteLine("password: " + user.password);
Console.WriteLine();
}
}
6. 数据修改
using (UserEntities context = new UserEntities())
{
ObjectSet<tb_User> results = context.tb_User;
foreach (tb_User user in results)
{
user.password = "new password";
}
context.SaveChanges();
}
7. 数据添加
using (UserEntities context = new UserEntities())
{
tb_User user = new tb_User();
user.Username = "新用户";
user.password = "初始密码";
context.tb_User.AddObject(user);
// 或:
// context.AddObject("tb_user", user);
context.SaveChanges();
}
8. 数据删除
using (UserEntities context = new UserEntities())
{
tb_User user = null;
foreach (tb_User u in context.tb_User)
{
if (u.Username == "新用户")
{
user = u;
}
}
if (user != null)
{
context.tb_User.DeleteObject(user);
}
context.SaveChanges();
}