Code Copied

EF Code First系列–01.理解EF架构并创建第一个项目

Entity Framework 是微软官方提供的一款ORM(Object-Relation Mapping)框架,从当初VS 2008 SP1发布EF以来,至今已经发展到6.0+的版本了。随着EF的不断更新,它所支持的功能越来越多(例如Migration),性能也较4.x之前有了显著的提高。

从本篇开始,是一系列关于EF 6.x的入门使用教程。由于本人水平有限,文中会出现一些错误的地方,还请多多指教。
好了,那就让我们开始EF Code First的旅程吧。

1. 理解Entity Framework架构

EFArchitecture_thumb8

1.1 EDM的构成

1.1.1 EDM (Entity Data Model)

Entity Framework以EDM(Entity Data Model)为主,将数据逻辑层切分为3块,分别为:Conceptual Model(概念模型)、Mapping(映射)、Storage Model(存储模型)。

1.1.2 Conceptual Model(概念模型)

概念模型指的是类模型以及类与类之间的关系,它独立于你的数据库结构设计。

1.1.3 Storage Model(存储模型)

存储模型即数据库设计中的Tables, Views, Stored Procedures, Functions, Relationships等。

1.1.4 Mapping(映射)

映射作为概念模型和存储模型的中间层,它的作用就是把类模型和存储模型关联起来。

1.2 Entity Framewrok的执行过程

1.2.1 LINQ to Entities

Entity Framework可以通过LINQ的方式去访问实体层。

1.2.2 Entity SQL

Entity Framewrok还可以像ADO.NET那样直接执行SQL语句。
虽然Linq to Entities能够满足基于Tables的CURD,但是数据库设计时还会包含诸如Stored Procedure, Functions这种无法直接映射成实体的元素。
当需要使用Stored Procedure, Functions时,Entity SQL就派上用场了。

1.2.3 ObjectServices

对象服务是访问数据库并返回数据的主要入口。对象服务负责将数据库的数据实体化,它把Data Provider的数据转换成我们的实体对象。
这里的Data Provider可以理解为SQL Server Provider、Oracle Provider等数���提供者,实体对象即我们所说的Domain Model中类的实例。

1.2.4 Entity Client Data Provider

这一层是将Linq to Entities和Entity SQL转换为能被数据库理解的SQL语句,然后由ADO.NET执行这些SQL语句。

1.2.5 ADO.NET Provider

这一层是和数据库直接打交道的ADO.NET。

也许上面的基本概念还不能够让大家明白Entity Framework是如何执行的。
那么请看下图中的流程,数据库无论是SQL Server还是Oracle,不同之处仅仅在于T-SQL和PL-SQL的语法,而这正是Entity Data Provider和ADO.NET要做的。

Entity-Framewrok-Processes_thumb1

2. 创建第一个Entity Framework项目

2.1 创建基于EF的项目

2.1.1 File → New → Project

image

2.1.2 输入项目名称

image

控制台应用程序创建成功后,将会看到如下图所示的画面:

image

2.1.3 通过Package Manage安装EF到项目中

(1) 在VS中按照路径Tool → Library Package Manager → Package Manager Console包管理器

image

(2) 在命令窗口输入命令Install-Package EntityFramework

image

(3) 安装成功后的结果如下图,在项目中成功加入了EntityFramework和EntityFramework.SqlServer的引用

image

当前最新的版本是6.1,你也可以在nuget上查找EFd的其他版本进行安装。
链接地址:http://www.nuget.org/packages/EntityFramework/
image 

2.2 创建Model并创建第一个Model Class: Product

image

Product.cs

2.3 创建数据库上下文DbContext

image

2.4 创建Database并添加第一个Product实例

(1) 使用DbContext并添加Product

image

(2) 在app.config文件中设置connectionString
使用Initializer是告诉EF通过什么方式创建数据库,但是应用程序并不知道数据库的连接,所以需要在app.config文件中配置数据库连接。
image

注意:默认情况下数据库连接的name和DbContext(数据库上下文)的类名称是一样的。

(3) 运行程序

image

程序执行完成后,打开数据库。可以看到数据库PMS已经创建成功了,Products表也有了一条数据。

image