EF框架概述之Model First

简介

    Model First是EF 4开始新增的功能,主要是提供给目前没有数据库,但又需要使用EF设计模型的程序员使用。正如其名,程序员要先在Designer内设计好模型的结构,再利用这个结构来生成数据库。

步骤01

    首先,依然是新增一个ADO.NET实体数据模型,但这次选择的是“空的EF Designer模型”,然后单击“完成”按钮。如下图:

步骤02

    完成后,会出现一个空白的Designer,并且工具箱也会出现必要的模板,就像使用Windows Forms的窗体设计器一样,由工具箱拖拉出模板放到Designer的空间内,以此建立模型。如下图:

步骤03

    接着,建立Blog这个数据模型,方法很简单,由左方的工具箱将“实体”拖放到Designer内,就会产生一个新的模型,然后将名称改为Blog,并在模型上单击鼠标右键,选择“新增”>>“标量属性”命令,并给其命名。如下图:

步骤04

    新增ID、OwnerID、Caption以及DataCreated四个属性后,Blog模型如下图:

步骤05

    接着设置ID、OwnerID、Caption以及DataCreated属性的数据类型,具体过程也很简单,只要选择属性后,在属性窗口的类型中选择所需的类型即可,如下图:

字段类型设置
字段 类型
ID Guid
OwnerID Guid
Caption String
DataCreated DateTime

步骤06

    设置完成后,另外新建一个模型BlogArticle,用于建立Blog相同的方法建立BlogArticle模型,其字段设置如下:

字段设置
字段 类型
ID Guid
BlogID Guid
Subject String
Body String
DataCreated DateTime
DateModify DateTime

    当完成BlogArticle的构建时,屏幕显示画面如下图所示:

步骤07

    接着要建立这两个模型之间的关联,在工具箱中选择“关联”选项,然后分别选中两个模型,就会出现关联线,因为Blog可以同时拥有多个BlogArticle,所以是一对多的关系(一个Blog对应多个BlogArticle),如下图:

步骤08

    在建立关联的同时,还会产生“导航属性”选项,通过导航属性,就能直接浏览关联好的对象。设置完成后,请在Designer的空白处单击,可以看到属性窗口内会出现有关于这个Modle的设置,将“以复数形式表示新对象”设为true,会让Blog产生数据表时将名称设为Blogs,BlogArticle会设为BlogArticles。至此,设计已完成,但要将它生成为数据库前,还需要做一个设置,就是需要一个DbContext对象。只要在Designer上单击鼠标右键,选择“添加代码生成项”即可。如下图:

步骤09

    这时会出现DbContext生成器的选项,选择“EF 6.x DbContext 生成器”,并将文件名设置为BlogModel.tt,再按“添加”按钮,如下图所示:

步骤10

    程序完成后,就能在想目中看到BlogModel.edmx下出现了BlogModel.context.tt文件以及BlogModel.tt,其下还包含了BlogModel.Context.cs以及在Designer中所设计的Model的程序代码文件。在Designer的空白处单击鼠标右键,选择“根据模型生成数据库”命令,如下图:

步骤11

    此时会出现“生成数据库”向导,单击“新建连接”按钮,在数据连接的窗口中,设置要连接的数据库,并在“选择或输入数据库名称”下拉菜单中输入BlogDb,然后点击“确定”按钮,这时会出现是否要建立新数据库的对话框,单击“是”按钮新建数据库。如下图:

步骤12

    此时会回到“生成数据库”向导,点击“下一步”、接着会出现数据库架构脚本生成的屏幕显示画面,点击“完成”按钮,Visual Studio将自动生成DDL文件并打开。如下图:


步骤13

    直接点击左上角的执行按钮,就能将这个DLL送到数据库执行,当执行完时,就可以看到数据库中多了Blogs以及BlogArticles两个表,它们之间也设置了Foreign Key的关联,如下图:

    注意:若无法在Visual Studio上执行(例如使用的是Sql Server 2014且没有安装Sql Server Data Tools 2014)时,请将DLL复制到SQL Server Management Studio中执行,一样可以完成数据库架构更新的工作。    

    在Model First产生数据库及数据对象后,就可以使用程序代码来处理数据库的访问工作,这部分与Database First和Code First都一样,所以留在Code First的部分一起说明。

猜你喜欢

转载自blog.csdn.net/cgs_______/article/details/80451252