当前位置:文档之家› Entity Framework 4中的Code-First, Model-First和Database-First模式

Entity Framework 4中的Code-First, Model-First和Database-First模式

Entity Framework 4中的Code-First, Model-First和Database-First模式
Entity Framework 4中的Code-First, Model-First和Database-First模式

Entity Framework 4中的Code-First, Model-First和Database-First模式

https://www.doczj.com/doc/ec15956299.html,/n-pei/archive/2010/08/12/1797751.html

我使用Entity Framework是在开始学习Silverlight的时候。用了半年左右。最近https://www.doczj.com/doc/ec15956299.html,团队发布了EF Feathure CTP 4。主要是增加了Code First这个功能。

在说明Code First之前,先和大家回顾下

EF4增加的新特性

1.外键支持(Foreign Keys)

可以通过直接设置外键属性来设置实体之间的关系。

2.延迟加载支持

这个功能默认情况下是开启的,也就是说一个查询操作返回的实体只有在被用到时才从服务器加载。

3. POCOs支持

这样你的实体对象就可以独立于EF而存在。不懂POCOs?没关系,这里有几篇很好的文章帮助你理解:

https://www.doczj.com/doc/ec15956299.html,/b/adonet/archive/2009/05/21/poco-in-the-entity-framework-part-1-the-exp erience.aspx

https://www.doczj.com/doc/ec15956299.html,/b/adonet/archive/2009/05/28/poco-in-the-entity-framework-part-2-comple x-types-deferred-loading-and-explicit-loading.aspx

https://www.doczj.com/doc/ec15956299.html,/b/adonet/archive/2009/06/10/poco-in-the-entity-framework-part-3-change -tracking-with-poco.aspx

4.T4代码生成的支持

T4不但简化了代码生成的个性化配置,而且让开发人员对代码有了更灵活和强大的控制。

5.更好的N-Tier设计支持

6.改进SQL语句的生成

为了提供EF生成的SQL语句的可读性和性能,在EF4中,查询生成SQL的部分做了很大的改进。

7.增强对存储过程的支持

这篇文章里我将会和大家探讨下Database First模式,Model First模式和Code First模式在EF4

和VS2010中如何使用以及它们的优缺点。

Database First模式的介绍

这个是最早也是最简单的模式。当然新手可以看看下面的内容,如果是EF使用很久了请跳过这里。首先在创建好的VS2010的工程中,右键添加新项,添加https://www.doczj.com/doc/ec15956299.html, Entity Data Model:

点击下一步,选择从数据库生成:

点击下一步,你就可以选择你需要使用的数据库,我这里使用NorthWind:

选择好数据库后点击下一步,选择你要用到的表,试图或者是存储过程:然后点击完成,VS2010自动为你生成好了Data Model:

当然这个功能限制了开发人员对整个生成的Data Model的修改,于是出来了POCOs的使用。使用POCOs让开发人员对数据库的操作更加灵活。

Model First模式的介绍

之前我有一篇文章使用MVVM+MEF+Silverlight实现的Sellthrough文章里面介绍了使用Model First的模式。好像这个模式大家用的并不多,大部分人现在使用的是POCOs。如果建立一个小的数据模型,在设计实体关系模型时我觉得完全可以使用Model First来进行。

熟悉Model First的你完全可以跳过下面的例子继续看Code First部分了。

在Database First中我们创建的Model是

那么Model First中我们需要创建的就只是一个空Model。如上图:

在创建好一个空的Model后,在这个Model的设计模式下右键选择新增,新增一个实体:

我们给它命名为Products:

点击确定,为这个Entity添加属性:比如:name,Supplier,UnitPrice。

同样的方法我们为这个Data Model添加一个Customers实体,它的属性有Company,Name,Title。创建好的Model如下:

这么简单的模型对于我们来说没有意义,所以接下来我们要给实体之间加上关系对应。

在这个Data Model的设计界面的空白处,右键选择添加,添加关联(Association):

Customer和product是n-n的关系,所以我们给他们每个人增加一个Navigation Properties:

都是Many-Many。创建好Model后,我们下一步就是用这个Model来生成数据库脚本了。

在空白处点击右键:

选择从Model生成数据库,VS2010会给你向导,在向导页面选择新连接,然后输入一个数据库名(目前不存在的)。系统会提示你,数据库不存在,是否要创建,选择是。

完成后你会发现你的项目中多了个sql脚本:

现在你需要做的只是打开SQL Server Management Studio并运行下上面这个SQl脚本。

Code First模式

这个模式是我要重点说明的。使用Code first这个模式后,你的项目中可以说就不再需要.edmx这种系统自动生成的Data Model了。

这部分我还不是很有把握,很多东西还没学。但是我会用两个例子来告诉大家如何使用ObjectContext和DBContext来直接创建数据库。

既然是Code First那么最重要的就是我们创建实体的部分了。创建好了实体,我们再去创建ObjectContext或者是DBContext,最终借助ObjectContext或者是DBContext来完成数据库的自动创建。

实体的创建:

很简单的几个实体。书籍,作者出版商。

接下来我们创建一个BookCatalog,它继承了ObjectContext类,这里需要注意的是在BookCatalog 的构造函数中有个SqlConnection的参数。

我们就是要靠这个连接字符串来创建数据库所在的位置和名称。

除此之外就是要注意对象集ObjectSet的使用:

其它的出版商和作者是BookCatolog的ObjectSet。

完成这个类后,和上面的Model First遇到的问题相同,这么简单的东西不可能满足我们的业务需求的。所以引出来了EntityConfiguration类。如何使用呢?

首先我们创建一个BookConfiguration类,继承了EntityConfiguration,代码如下:

HasKey:设置主键,

IsRequired()不为空字段,

WithMany是一对多。

上面的这些属性就是为了在生成数据库时Book的表有主键,有不为空字段和外键关系。

我们来使用它创建个数据库试试。

我这里使用一个控制台应用程序来执行测试的。

在Main方法入口中,我们首先需要创建一个ModelBuilder,使用它我们才能使用Configuration 类和创建一个Model,接着创建Object。

Ok,有个model后,就可以借助上面的BookCatalog来创建数据库,被就行数据操作:

从代码中可以看到model首先是创建了一个ObjectContext,然后这个context去判断给数据库是否存在(CodeFirstWalkthrough),不存在就创建这个数据库。

最后是在数据库中添加一条记录。

运行后看结果:

下面说明如何使用DbContext来创建数据库:

首先还是创建一个类继承了DbContext这个类:

它的属性类型是DbSet,在ObjectContext中式ObjectSet,很相似。

使用它来创建数据库:

这个比用ObjectContext创建数据库要简单多了,但是你会发现我们的SimpleBookCatalog的构造函数需要的参数只是个DbModel,那么运行它后创建的数据库呢???????默认的你的机器必须是安装了SQL express,数据库已经被创建好在那里。

那么数据库的名称呢?因该是Projectname.SimpleBookCatalog,和你的DbContext名字相同。如果你想创建在其它地方可以吗?当然可以。很多方式,首先是构造函数中给出来sqlconnection,像上面的ObjectContext创建数据库。

第二个方式就是在App.config文件在connectionStrings节点处配置好你的数据库连接串。

你可以使用sql server ,sql express或者是SQL CE。链接字符串的名字必须是SimpleBookCatalog。

分析这三种方式的优缺点,

Database-First模式明显性能会差点,但是它很适合初学者,或者是比较急的小型项目。

Model-First模式优点是开发人员能够在设计模型时完全了解数据库的结构,但是缺点是在模型设计完后,还是需要去手动创建数据库,并且生成的脚本有点不简洁。

Code-First模式有点不用说了,就是上面两个模式的缺点。缺点应该也是有很多的,比如更新数据库。

大家可以说说自己的意见

相关主题
文本预览
相关文档 最新文档