您的位置:首页 > 其它

Entity Framework入门

2017-09-08 15:32 85 查看

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

推荐教程:

《Entity Framework 6 Recipes》中文翻译系列

基础

上下文对象

上下文对象(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