Entity Framework入门
准备工作
如果使用的visual studio 2010,可安装NuGet Package Manager包管理工具
然后使用NuGet程序包管理器来安装 EntityFramework。安装之后,引用中就存在 EntityFramework
三种不同的approach:
- Database First-参考Part 1 - What is Entity Framework,
Database First从一个已存在的数据库逆向生成一个模型 - Model First-参考Part 2 - Entity Framework Model First Approach,
Model First从EF设计器中创建的模型生成数据库 - Code First-参考Part 3 - Entity Framework Code First Approach
推荐教程:
基础
上下文对象
上下文对象(context object)的。上下文对象是实体框架服务的入口,它暴露实体对象,管理数据库连接,生成参数化的SQL语句,从数据库中封送(marshals)数据或封送数据到数据库,缓存对象,维护对象变化跟踪,把无类型的结果集转换到一个强类型的集合对象。
一开始,上下文对象为ObjectContext对象,现在,实体框架支持另一个最新的名为DbContext的上下文对象。DbContext大大简单化了使用实体框架的体验。有趣的是,DbContext是ObjectContext的一个包装器或者外观实现者。以一种直观的、友好的、有效的方式暴露底层ObjectContext的功能。
Model First
Model First首先创建Entity Model,包括
1.Entites
2.Entites之间的关系
3.继承层级等
如下,在设计器中创建好实体模型EmployeeModel.edmx
然后,在设计页面上选择”根据模型生成数据库”,选择”您的数据库连接”后,生成EmployeeModel.edmx.sql,其中的SQL包括:
1.创建对应的表
2.创建主键、外键
3.创建索引
在EmployeeModel.edmx.sql中,右键”执行SQL”,执行SQL语句
Code First
Code First允许我们先创建自定义的类,然后Entity Framework会基于这些自定义的类来自动生成数据库
具体的例子请参考Part 3 - Entity Framework Code First Approach
自定义表名、列名和外键名
上面使用Code First来生成了Departments和Employees 表。注意Employees 表Department_Id列名,有一个下划线。如果要使列名没有下划线该怎么呢?
使用System.ComponentModel.DataAnnotations.Schema命令空间的ForeignKey 属性
同样,为自定义表名和列名,也可进行类似的操作。
[Table("tblEmployees")]
public class Employee
{
public int Id { get; set; }
[Column("First_Name")]
public string FirstName { get; set; }
public string LastName { get; set; }
public string Gender { get; set; }
public int Salary { get; set; }
public int DepartmentId { get; set; }
[ForeignKey("DepartmentId")]
public Department Department { get; set; }
}
数据库创建后如何处理模型的变化
参考Part 5 - How to handle model changes in entity framework
如果在Employee类中添加一个新的属性
public string JobTitle { get; set; }
此时运行程序,提示如下的错误:
The model backing the 'EmployeeDBContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269).
这是因为创建数据库后,模型(即Employee类)已更改。这意味着模型和数据库不再同步,因此会报错。entity framework使用自动生成的__MigrationHistory表,检查创建数据库后模型是否已更改。
为了解决这个错误,我们必须告诉实体框架当模型改变时该怎么做?
添加一个Global.asax文件,在Application_Start() 方法中,添加如下的代码,表示model改变后,Entity framework会删除并重新创建数据库
protected void Application_Start(object sender, EventArgs e)
{
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<EmployeeDBContext>());
}
另一种方式是,总是删除并重新创建数据库
Database.SetInitializer(new DropCreateDatabaseAlways<EmployeeDBContext>());
本文介绍了Entity Framework的基础知识,包括三种不同的方法:Database First、Model First和Code First。重点讲解了Code First的用法,如自定义表名、列名和外键名,并讨论了数据库模型变化后的处理策略。推荐了《Entity Framework 6 Recipes》作为深入学习的资源。
466

被折叠的 条评论
为什么被折叠?



