小编典典

代码优先与模型/数据库优先

all

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

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

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

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

在这两种情况下,我最终都会POCO得到不可知的对象ORM和派生自DbContext.

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

那么这两种方法有什么区别呢?仅仅是偏好 VS2010 与 Enterprise Manager 吗?


阅读 196

收藏
2022-03-04

共1个答案

小编典典

我认为区别在于:

代码优先

  • 非常受欢迎,因为铁杆程序员不喜欢任何类型的设计师,并且在 EDMX xml 中定义映射过于复杂。
  • 完全控制代码(没有难以修改的自动生成代码)。
  • 一般的期望是您不会为 DB 烦恼。DB只是一个没有逻辑的存储。EF 将处理创建,您不想知道它是如何完成这项工作的。
  • 对数据库的手动更改很可能会丢失,因为您的代码定义了数据库。

数据库优先

  • 如果您拥有由 DBA 设计、单独开发或拥有现有数据库的数据库,则非常受欢迎。
  • 您将让 EF 为您创建实体,并在修改映射后生成 POCO 实体。
  • 如果您想要 POCO 实体中的附加功能,您必须修改 T4 模板或使用部分类。
  • 由于数据库定义了您的域模型,因此可以手动更改数据库。您可以随时从数据库更新模型(此功能效果很好)。
  • 我经常将它与 VS 数据库项目(仅限高级版和旗舰版)一起使用。

模型优先

  • 恕我直言,如果您是设计师粉丝(=您不喜欢编写代码或 SQL),则很受欢迎。
  • 您将“绘制”您的模型并让工作流生成您的数据库脚本和 T4 模板生成您的 POCO 实体。您将失去对实体和数据库的部分控制,但对于小型简单项目,您将非常高效。
  • 如果您想要 POCO 实体中的附加功能,您必须修改 T4 模板或使用部分类。
  • 由于您的模型定义了数据库,因此很可能会丢失对数据库的手动更改。如果您安装了数据库生成电源组,这会更好。它将允许您更新数据库模式(而不是重新创建)或更新 VS 中的数据库项目。

我希望在 EF 4.1 的情况下,还有其他几个与 Code First 与 Model/Database first 相关的特性。Code first
中使用的 Fluent API 不提供 EDMX
的所有功能。我希望存储过程映射、查询视图、定义视图等功能在首先使用模型/数据库时有效并且DbContext(我还没有尝试过)但它们在代码中没有。

2022-03-04