EF Code First优缺点

时间:2012-01-09 18:53:37

标签: .net architecture orm entity-framework-4 entity-framework-4.1

  

可能重复:
  EF 4.1 Code-first vs Model/Database-first

我刚开始学习EF 4.0 CodeFirst,我想听听专家的意见 EF CodeFirst的优点和缺点是什么?

3 个答案:

答案 0 :(得分:8)

我认为每种方法更适合不同的场景:

建议使用Database-first或Model-First的场景:

  • 具有稳定架构的持久数据库
  • 对数据库和模型的更改是增量
  • 您希望能够在一个图表中看到您的模型并从那里更新
  • 您可以将模型划分为非重叠图

建议使用代码优先的场景:

  • 模型的开发由对数据库不感兴趣的程序员完成
  • 模型类包含逻辑
  • 模型类具有奇异(非标准)结构
  • 模型分为许多在设计时都不知道的程序集(扩展名)
  • 数据库是短暂的(例如应用程序的运行时)
  • 数据库可以经常更改

如果您想要一个足够动态的持久数据库来包含不断变化的结构,那么请考虑您的模型/模式为了不同/依赖于上下文而重用的泛型类/表。


更新

我现在建议在其他情况下使用Code-First:

  • 当您希望能够在LocalDB上编写并快速轻松地运行集成测试时(而不是使用SSDT)
  • 如果您更喜欢在一个地方看到模型和映射,而不是遍历图表和映射窗口
    • 如果有人正确地映射了属性,或者没有正确映射属性,则希望它更明显。作为ConcurrencyCheck
  • 由于您可以在非本地环境中轻松禁用架构生成,因此数据库的字符不太相关

答案 1 :(得分:5)

我一直是数据中心方法的倡导者,我相信这是优势和劣势的来源。

如果您的优势在于数据库设计和开发,您可能会发现从数据库架构开发更容易,更直观。但是,如果您在对象和类中更好地思考,或者如果您直接从类模型开始工作,那么从CodeFirst角度开始可能会更好。

就我个人而言,我发现自己必须根据CodeFirst的观点进行更多更改,而这些更改来自于生成我的类的“DataFirst”。

答案 2 :(得分:0)

主要区别在于Code First要求您在代码中定义所有内容,而Model / Database首先要求您在XML / Designer中定义所有内容,并且只在代码中定义最少的内容。

例如,如果您想要双向导航属性,则必须在每个实体中为其编写代码。使用其他方法时会自动生成此信息。

我喜欢首先给你的电源代码,但大部分时间我都不会费心去做所有这些。

在大多数情况下,你会得到完全相同的东西。这就是你的模型。

另一个缺点是(当前)在Code中,当你进行更改时,它会丢弃表并重新创建它。丢失所有数据(您当然可以为数据库设定种子,但您不会获得可能手动输入的数据)。这将在Code First Migrations产品发布时解决。