【问题标题】:EF CodeFirst advantages and disadvantages [duplicate]EF CodeFirst的优缺点[重复]
【发布时间】:2012-02-06 07:01:57
【问题描述】:

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

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

【问题讨论】:

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


【解决方案1】:

我一直倡导以数据为中心的方法,我相信这就是优点和缺点的来源。

如果您的优势在于数据库设计和开发,您可能会发现从数据库模式进行开发更容易、更直观。但是,如果您在对象和类方面思考得更好,或者如果您直接从类模型中工作,您可能最好从 CodeFirst 的角度开始。

就个人而言,我发现自己必须从 CodeFirst 的角度进行更多更改,而不是从生成我的类的“DataFirst”。

【讨论】:

    【解决方案2】:

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

    例如,如果您需要两种方式的导航属性,那么您必须在每个实体中为此编写代码。这是在使用其他方法时自动为您生成的。

    我喜欢代码首先给你的力量,但大多数时候我只是懒得做所有这些。

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

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

    【讨论】:

    • 我不同意缺点之一是它会丢弃数据库。这是完全可配置的,默认情况下它不会删除数据库,但会抛出错误(就像模型优先和数据库优先在检测到更改时所做的那样)。
    • @WouterdeKort - 我的观点是,首先在数据库中,数据库更改很容易在模型中更新并生成新代码,所有这些几乎都是自动的。在代码优先中,这是一个更加手动的过程,除非您只是让它删除数据库并重新创建它。您必须在代码和数据库中手动进行更改。
    【解决方案3】:

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

    推荐使用数据库优先或模型优先的场景:

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

    推荐代码优先的场景:

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

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


    更新:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-21
      • 2015-05-18
      • 1970-01-01
      • 2016-05-18
      • 2013-06-09
      • 1970-01-01
      • 1970-01-01
      • 2018-07-25
      相关资源
      最近更新 更多