【Entity Framework】 EF三种开发模式

简介: 【Entity Framework】 EF三种开发模式

一、概述

前面博文已介绍了Entity Framework是什么,EF架构等基本知识介绍。本文将从介绍Entity Framework使用的三种方式。


Entity Framework的底层其实是调用ADO.NET,它是更高层次的封装,作为数据访问的技术。Entity Framework设计的高扩展性,体现在灵活的映射定义。简单的说,使用Entity Framework可以充分定义与数据库表映射的实体,这个实体可以直接用于业务逻辑层或作为服务的数据契约。使用EF后,可以将实体类的设计工作完全放在EDM设计过程中,而不需要手工写哪些大同小异的代码,令人欣喜的是这个实体模型可以在运行时修改并生效,我们开发时也不用再频繁地与数据库打交道。只要通过操作实体模型就能完成对数据库的操作。

EF框架可以划分一下三种应用模式:

  • DataBase First
  • Model First
  • Code First


下面将详细介绍下面三种模式

二、DataBase First

DataBase First参考

2.1 DataBase First简介

Database First就是先建数据库或使用已有的数据库。然后再vs中添加ADO.Net实体数据模型,设置连接并且选择需要的数据库和表。它是以数据库设计为基础的,并根据数据库自动生成实体数据模型,从而驱动整个开发流程。除生成实体模型和自跟踪实现模型,还支持生成轻型DbContext。这种模式的好处是使用简单,容易上手。比较适合于采用已经存在的数据库进行开发。既通过简单的方式实现了,又重用了数据库。

2.2 DataBase First应用步骤

如果使用DataBase First模式,先创建好对应的数据库及表。


  1. 现在项目->添加新项->选择ADO.NET实体数据模型。
  2. 打开启动实体数据模型向导,选择“从数据库生成”,并创建数据库连接字符串。
  3. 单击“表”旁边的复选框以导入所有表,然后单击“完成”

2.3 DataBase First总结

Database First开发,它允许我们基于现有数据库在EF设计器中创建模型。然后,我们使用该模型在数据库中读取和写入一些数据。


三、Model First

3.1 Model First简介

Model First 允许你使用实体框架设计器创建新模型,然后从该模型生成数据库架构。 模型存储在 EDMX 文件(.edmx 扩展名)中,可以在实体框架设计器中查看和编辑。 你在应用程序中与之交互的类是从 EDMX 文件自动生成的。

3.2 Model First实现步骤

  1. 使用 Visual Studio 中包含的实体框架设计器来创建模型
  • “项目” ->“添加新项…”
  • 从左侧菜单中选择“数据”,然后选择"ADO.NET实体数据模型"
  • 输入“xxxModel”名称并单击确定,这将启动实体数据模型向导
  • 选择“空模型”并单击“完成”


2.向模型添加实体、属性和关联

  • 右键单击设计图面并选择“属性”
  • 在“属性”窗口中,将“实体容器名称”更改为 xxxContext。这是将为你生成的派生上下文的名称,该上下文表示与数据库的会话,允许我们查询和保存数据
  • 右键单击设计图面并选择“添加新项”->“实体…”
  • 输入 Blog 作为实体名称,输入 BlogId 作为键名称,然后单击“确定”
  • 右键单击设计图面上的新实体并选择“添加新项”->“标量属性”,输入 Name 作为属性名称。
  • 重复此过程以添加 URL 属性。
  • 右键单击设计图面上的 URL 属性并选择“属性”,在“属性”窗口中将“可为 null” 设置更改为 True。这样,我们无需为 Blog 分配 URL 即可将其保存到数据库中

3.添加关联(或关系)

  • 右键单击设计图面并选择“添加新项”->“关联…”
  • 使关系的一端指向 Blog,多重性为“一”,另一端指向 Post,多重性为“多”。这意味着一个 Blog 有多个 Post,而一个 Post 属于一个 Blog
  • 确保选中“将外键属性添加到“Post”实体”框,然后单击“确定”


四、Code First

4.1 Code First概述

Code First模式我们称之为“代码优先”模式,从某种角度来看,其实“Code First”和“Model First”区别并不是太明显,只是它不借助于实体数据模型设计器,而是直接通过编码方式设计实体模型(这也是为什么最开始“Code First”被叫做“Code Only”的原因)。但是对于EF它的处理过程有所差别,例如我们使用Code First就不再需要EDM文件,所有的映射通过“数据注释”和“fluent API”进行映射和配置。


4.2 Code First实现步骤

  1. 添加类创建实体模型,并创建导航属性,设置实体模型之间关系。
  2. 安装Entity Framework包
  • 通过NuGet在线安装Entity Framework包
  • 使用"程序包管理器控制台"通过"Install-package EntityFramework"命令安装

3.创建dbContext上下文

  • 首先在配置文件中(app.config)中配置数据库链接字符串
  • 接下来创建dbContext类,此类继承System.Data.Entity.DbContext类,其构造函数调用了积累带参数的构造函数,用来读取配置文件中的数据库链接字符串。

4.对数据进行增删改查操作

  • 使用dbContext对象对数据库进行操作

4.3 Code First的映射规则

  1. 关于表和字段名的约定
    Code First约定表名使用实体类名的复数形式来命名表明,属性映射的列使用与类中属性一致的名字命名
  2. 关于主键的约定
    Code First默认规定将命名为Id或[类名]Id的属性是为类的主键,如果是int类型或GUID类型同时会设为标识列。
  3. 关于字符串属性的约定

Code First将String类型属性映射为不限长度的非空列中。默认数据类型为nvarchar(max),且允许为空。

  1. 关于布尔属性的约定
    Code First将bool类型属性映射为bit类型,且不允许为空
  2. 关于外键的约定

对于外键,如果在类中添加了引用类型,而这个引用类型也在Entity Framework的上下文中,EF会把这种属性成为导航属性。

一旦EF在类中检索到导航属性,就会寻找对应的外键。EF会认为属性名+Id或者类名+Id可能就是外键属性,如果找到名称一致且类型与导航属性目标类的主键类型一致,则认为是外键。如果类型不一致,EF则会认为该类设置有误。


如果没有找到符合要求的属性,EF会自己添加一个外键属性。另外,对于不同的关系也有一些不同的约定。


  • 一对一关系:要求导航属性双方都应该具有外键配置。
  • 一对多关系:要求多的一方设置外键。同时如果在一方这边设置了集合类型的导航属性,那么EF会自动到目标类中寻找外键属性。
  • 多对多关系:会生成一个中间关系表。
目录
相关文章
|
XML 存储 数据库连接
Entity Framework学习笔记——edmx文件
上文简单介绍了一下Entity FrameWork,这里说一下EF的核心——edmx文件。 在VisualStudio中建立edmx文件(此例环境为VisualStudio2012)
Entity Framework学习笔记——edmx文件
|
12天前
|
SQL 关系型数据库 数据库连接
详解 Entity Framework(EF)核心组件与数据访问方法探索
Entity Framework是一个ORM框架,简化.NET开发者与数据库的交互。它始于.NET Framework的一部分,但现在可通过NuGet独立获取。ORM允许对象模型直接映射到数据库结构,避免直接编写SQL。
204 2
详解 Entity Framework(EF)核心组件与数据访问方法探索
|
28天前
|
开发框架 缓存 .NET
【Entity Framework】EF中DbSet类详解
【Entity Framework】EF中DbSet类详解
14 1
【Entity Framework】EF中DbSet类详解
|
28天前
|
SQL 存储 开发框架
实体框架EF(Entity Framework)简介
实体框架EF(Entity Framework)简介
31 7
|
28天前
|
开发框架 .NET 数据库
【Entity Framework】EF中SaveChanges如何使用
【Entity Framework】EF中SaveChanges如何使用
15 0
|
28天前
|
SQL 存储 开发框架
【Entity Framework】EF中的增删改查
【Entity Framework】EF中的增删改查
17 0
|
28天前
|
存储 SQL 开发框架
【Entity Framework】如何使用EF中的生成值
【Entity Framework】如何使用EF中的生成值
14 0
|
28天前
|
SQL API 数据库
【Entity Framework】EF配置之代码配置详解
【Entity Framework】EF配置之代码配置详解
7 0
|
存储 开发框架 .NET
Entity Framework基础01
Entity Framework基础01
187 0
Entity Framework基础01
|
SQL 数据库 C++
Entity Framework初体验
Entity Framework初体验
166 0
Entity Framework初体验