为了账号安全,请及时绑定邮箱和手机立即绑定

代码-优先与模型/数据库-第一

/ 猿问

代码-优先与模型/数据库-第一

代码-优先与模型/数据库-第一

使用实体框架4.1代码-先通过模型/数据库-先使用EDMX图的利弊是什么?

我试图完全理解使用EF4.1构建数据访问层的所有方法。我在使用储存库模式IoC.

我知道我可以使用代码优先的方法:手动定义我的实体和上下文,然后使用ModelBuilder微调架构。

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

在这两种情况下,我最终POCO对象是ORM产生的不可知论者和上下文DbContext.

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

那这两种方法有什么区别呢?这仅仅是VS 2010对企业经理的偏好吗?


查看完整描述

3 回答

?
海绵宝宝撒

我认为不同之处在于:

代码优先

  • 非常受欢迎,因为硬核程序员不喜欢任何类型的设计人员,在EDMXXML中定义映射太复杂了。
  • 完全控制代码(没有自动生成的代码,很难修改)。
  • 一般的期望是,您不必费心使用DB。DB只是一个没有逻辑的存储。EF将处理创建,您不想知道它是如何完成工作的。
  • 对数据库的手动更改很可能会丢失,因为您的代码定义了数据库。

数据库优先

  • 如果您有由DBA设计的DB,或者是单独开发的,或者您有现有的DB,则非常受欢迎。
  • 您将让EF为您创建实体,在修改映射之后,您将生成Poco实体。
  • 如果您想要Poco实体中的其他特性,则必须使用T4、修改模板或使用部分类。
  • 手动更改数据库是可能的,因为数据库定义了域模型。您可以随时从数据库中更新模型(此功能运行得很好)。
  • 我经常使用这与数据库项目(只有高级和最终版本)。

模型优先

  • 如果你是设计师迷,IMHO很受欢迎(你不喜欢写代码或SQL)。
  • 您将“绘制”您的模型,让工作流生成您的数据库脚本,让T4模板生成您的Poco实体。您将失去对实体和数据库的部分控制,但对于小型轻松项目,您将非常有效率。
  • 如果您想要Poco实体中的其他特性,则必须使用T4、修改模板或使用部分类。
  • 对数据库的手动更改很可能会丢失,因为您的模型定义了数据库。如果您安装了数据库生成电源包,这将更好地工作。它将允许您更新数据库架构(而不是重新创建)或更新VS中的数据库项目。

我希望在EF 4.1的情况下,还有其他一些与代码优先和模型/数据库优先相关的特性。CodeFirst中使用的FLUENT API并不能提供EDMX的所有功能。我期望存储过程映射、查询视图、定义视图等特性在首先使用模型/数据库时起作用DbContext(我还没有试过)但他们没有在代码中首先。


查看完整回答
反对 回复 2019-06-14
?
料青山看我应如是

我认为,“编程实体框架”(Programming Entity Framework)的作者朱莉·勒曼(Julie Lerman)的这个简单的“决策树”应该有助于更有信心

更多信息这里.


查看完整回答
反对 回复 2019-06-14
?
POPMUISE

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

当您首先使用代码时,如果没有重新创建数据库和丢失所有数据,就无法更改模型。IMHO,这个限制非常严格,不允许在生产中首先使用代码。就目前而言,它并不是真正可用的。

代码的第二个小缺点是,首先,模型构建器需要主数据库上的特权。如果使用SQLServerCompactDatabase或控制数据库服务器,这不会影响您。

代码的优势首先是非常干净和简单的代码。您完全控制了这段代码,并且可以轻松地修改和使用它作为视图模型。

当您在不需要版本控制的情况下创建简单的独立应用程序时,以及在需要在生产中进行修改的项目中首先使用模型\数据库时,我建议使用代码优先方法。


查看完整回答
反对 回复 2019-06-14

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信