EF CodeFirst的优缺点

sab*_*ber 5 .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的优缺点是什么?

Dan*_*rod 8

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

建议使用Database-first或Model-First的方案:

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

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

  • 模型的开发由对数据库不感兴趣的程序员完成
  • 模型类包含逻辑
  • 模型类具有奇怪的(非标准)结构
  • 模型在许多组件之间划分,这些组件在设计时并不是全部已知(扩展)
  • 数据库是短暂的(例如应用程序的运行时)
  • 数据库可以经常更改

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


更新:

我现在建议使用Code-First来处理其他情况:

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


Tre*_*reK 5

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

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

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