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大大简单化了使用实体框架的体验。有趣的是,DbContextObjectContext的一个包装器或者外观实现者。以一种直观的、友好的、有效的方式暴露底层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来生成了DepartmentsEmployees 表。注意EmployeesDepartment_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入门相关推荐

  1. ADO.NET Entity Framework 入门示例向导(附Demo程序下载)

    ADO.NET Entity Framework 入门示例向导(附Demo程序下载) ADO.NET Entity Framework 是.Net Framework 3.5 SP1 引入的实体框架, ...

  2. ADO.NET Entity Framework 入门示例

    ADO.NET Entity Framework 是.Net Framework 3.5 SP1 引入的实体框架,它使开发人员可以通过对象模型(而不是逻辑/关系数据模型)专注于数据.实体框架Entit ...

  3. .NET Entity Framework入门简介及简单操作

    Entity Framework是微软借鉴ORM思想开发自己的一个ORM框架. ORM就是将数据库表与实体对象(相当于三层中的Model类)相互映射的一种思想. 最大的优点就是非常方便的跨数据库平台. ...

  4. Entity Framework入门教程:创建实体数据模型

    下图为一个已经创建好的数据库表关系 实体数据模型的创建过程 在Visual Studio项目中,右键程序集菜单,选择[添加]->[新建项],在[添加新项窗口]中选择[ADO.NET实体数据模型] ...

  5. ASP .NET MVC 之Entity Framework入门教程及源码

    本文主要的目的是 1. 说明Entity Framework Power Tools如何使用. 2. Entity Framework  快速门 实验环境: OS: Windows Server 20 ...

  6. ef6 oracle 存储过程,Entity Framework入门教程(14)---DbFirst下的存储过程

    EF6中DbFirst模式下使用存储过程 我们已经知道EF可以将L2E或Entity SQL的查询语句自动转换成SQL命令,也可以根据实体的状态自动生成Insert/update/delete的Sql ...

  7. 什么是Entity Framework(EF)

    Entity Framework入门教程(1)---Entity Framework简介 阅读目录 什么是Entity Framework 1.EF的概念 2.EF功能汇总 3.EF组成 回到顶部 什 ...

  8. ADO.NET Entity Framework Beta2(五)/快速入门(实体框架)

    This quickstart illustrates a series of tasks that support the topics in Getting Started with the En ...

  9. ASP.NET MVC5 + EF6 入门教程 (5) Model和Entity Framework

    文章来源: Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc-5-ef-6-get-started-model.html 上一节:ASP.NET MVC ...

  10. ASP.NET Core 入门教程 8、ASP.NET Core + Entity Framework Core 数据访问入门

    ASP.NET Core 入门教程 8.ASP.NET Core + Entity Framework Core 数据访问入门 原文:ASP.NET Core 入门教程 8.ASP.NET Core ...

最新文章

  1. C# 4.0 新特性之并行运算(Parallel)
  2. mongodb分片介绍—— 基于范围(数值型)的分片 或者 基于哈希的分片
  3. Iframe中的SSRS报表中使用windows.open在新窗口中不能打开URL中的问题
  4. SharedPreferences记住用户密码 态判断应用是否首次启动等
  5. 【图像分割】图像分割专栏栏主自述:分割,我们究竟在研究什么?
  6. 访问域名不走dns服务问题排查,报错could not resolve host
  7. android webviwe 头布局,Android布局问题,带有WebView下方的按钮
  8. VB2010 的隐式续行(Implicit Line Continuation)
  9. 前端学习(1915)vue之电商管理系统电商系统之通过路由展现权限列表
  10. PyChram使用技巧
  11. 前魅族副总裁李楠上手魅族17:颜值提升了
  12. BZOJ2820:YY的GCD
  13. R中的 url编码 和 解码
  14. 构建一套完整高效的供应链系统体系
  15. 网络协议学习(B站观看最多)
  16. Java后端进行Base64码加密、解密及MD5加密
  17. 笔记本CPU忽高忽低问题的解决
  18. WordPress中文汉字用户名不能注册怎么办?
  19. jqweui引入的标签
  20. C# 淘宝数据包下载,生成csv格式。可直接通过淘宝助理上传到淘宝店铺

热门文章

  1. R语言函数-tolower
  2. SAC案例精选:SAC Planning实现SOP(销售与运营计划)模拟沙盘
  3. Vue——Module build failed: TypeError: loaderContext.getResolve is not a function错误解决
  4. 阿里校招应届生面试经验
  5. 后端使用postman进行测试
  6. Spring 中 配置文件 加入 aspectj-autoproxy 项目报错
  7. 沥青路面粘弹性力学分析基础研究
  8. cacti graphs new.php,Cacti /graphs_new.php SQL Injection Vulnerability
  9. git提交,安装配置 commitizen cz-conventional-emoji $git cz代替$git commit
  10. 读《虚幻引擎程序设计浅析》笔记