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>());
相关文章推荐
- Java基础知识——Java入门与加深
- 0x00 Grails 入门笔记
- [OpenSceneGraph入门指导]1.6 OpenSceneGraph 概览
- Android 4编程入门经典 开发智能手机与平板电脑
- 深入浅出C#2008从入门到提高Step By Step(五)Windows应用程序常用控件类(8)-ComboBox
- arcgis api for flex 开发入门(九)webservices 的使用
- ACM编程比赛入门题目之敲七
- 《Apache MINA 2.0 用户指南》第一章:入门
- Linux入门学习之vi/vim编辑器
- 单元测试:(三) powermock + spring mvc mock 对 controller 层自动化测试入门
- 人人都可以做深度学习应用:入门篇(上)
- ActiveMQ从入门到实践
- AsyncTask入门
- C入门问题
- docker【1】docker简介(入门知识)
- linux编译器之再谈vim入门
- 教你们MyBatis 快速入门,还不快快收藏
- Spring Boot -- 快速入门
- git flow入门使用