首先与型号/数据库

什么是使用实体框架4.1的代码优先使用模型/数据库 - 先用EDMX图表的优点和缺点?

我试图完全理解使用EF 4.1构建数据访问层的所有方法。 我正在使用Repository模式和IoC

我知道我可以使用代码优先的方法:手动定义我的实体和上下文,并使用ModelBuilder来微调模式。

我也可以创建一个EDMX图并选择一个使用T4模板生成相同POCO类的代码生成步骤。

在这两种情况下,我最终得到了ORM不可知的POCO对象以及从DbContext派生的上下文。

数据库优先似乎是最吸引人的,因为我可以在企业管理器中设计数据库,快速同步模型并使用设计器对其进行微调。

那么这两种方法有什么区别? 它只是关于VS2010与企业管理器的偏好?


我认为不同之处在于:

先编码

  • 非常受欢迎,因为硬核程序员不喜欢任何类型的设计者,并且在EDMX xml中定义映射过于复杂。
  • 完全控制代码(没有自动生成的代码很难修改)。
  • 一般的期望是你不用打扰DB。 DB只是一个没有逻辑的存储。 英孚将处理创作,你不想知道它是如何做的。
  • 由于您的代码定义了数据库,手动更改数据库可能会丢失。
  • 数据库第一

  • 如果您有由DBA设计的DB,单独开发或者如果您有现有的DB,则非常受欢迎。
  • 您将让EF为您创建实体,修改映射后您将生成POCO实体。
  • 如果您需要POCO实体中的其他功能,您必须使用T4修改模板或使用部分类。
  • 数据库的手动更改是可能的,因为数据库定义了您的域模型。 您可以随时从数据库更新模型(此功能非常好)。
  • 我经常一起使用VS数据库项目(仅限Premium和Ultimate版本)。
  • 模型第一

  • 如果你是设计师粉丝(=你不喜欢编写代码或SQL),恕我直言受欢迎。
  • 您将“绘制”您的模型并让工作流生成您的数据库脚本并使用T4模板生成您的POCO实体。 您将失去对实体和数据库的部分控制权,但对于小型简单项目,您将非常高效。
  • 如果您需要POCO实体中的其他功能,您必须使用T4修改模板或使用部分类。
  • 由于您的模型定义了数据库,因此对数据库的手动更改很可能会丢失。 如果您安装了数据库生成电源包,这会更好。 它将允许您更新数据库模式(而不是重新创建)或更新VS中的数据库项目。
  • 我预计在EF 4.1的情况下,还有几个与Code First和Model / Database有关的其他功能。 代码中使用的Fluent API首先不提供EDMX的所有功能。 我期望像存储过程映射,查询视图,定义视图等功能在第一次使用模型/数据库和DbContext (我还没有尝试过)时DbContext但它们不首先在代码中使用。


    我认为“编程实体框架”的作者Julie Lerman这个简单的“决策树”应该有助于更加自信地做出决定:

    一个决策树可以帮助您选择不同的EF方法

    更多信息在这里。


    数据库第一和模型第一没有真正的区别。 生成的代码是相同的,你可以结合这些方法。 例如,您可以使用设计器创建数据库,而不是使用sql脚本更改数据库并更新模型。

    当您先使用代码时,无法改变模型而无需重新创建数据库并丢失所有数据。 恕我直言,这种限制是非常严格的,不允许在生产中首先使用代码。 目前它不是真正可用的。

    代码的第二个小缺点是模型构建器需要master数据库的特权。 如果您使用SQL Server Compact数据库或者如果您控制数据库服务器,这不会影响您。

    代码的优点是非常干净和简单的代码。 您可以完全控制此代码,并且可以轻松修改并将其用作视图模型。

    当您创建简单的独立应用程序而无需版本控制并在需要修改生产的项目中首先使用model database时,我可以推荐使用代码优先方法。

    链接地址: http://www.djcxy.com/p/15975.html

    上一篇: first vs Model/Database

    下一篇: How to add a table to the EF4 Context dynamically in code