【问题标题】:what is advantage of CodeFirst over Database First?CodeFirst 与 Database First 相比有什么优势?
【发布时间】:2011-09-27 05:40:43
【问题描述】:

我正在观看一些 EF 4.1 的视频和教程,但我不了解 CodeFirst 的任何好处(除了一些如果 DB 是非常小的 3-4 表并且我懒得先创建 DB)。

到目前为止,最好的方法是在某种数据库编辑器中创建数据库,这肯定比在实体模型中编辑要快,EF 会拾取每个关系并正确创建关联。我知道在命名约定等方面存在挑战,但我觉得管理 Code First 非常令人困惑,因为一切看起来都像代码,而且代码太多。

CodeFirst 可以做什么而 Db first 不能?

【问题讨论】:

    标签: entity-framework-4.1 ef-code-first ef-database-first


    【解决方案1】:

    CodeFirst 不能做 DB first 不能做的任何事情。归根结底,他们都在使用实体框架。

    使用codefirst的主要优点是:

    • 开发速度 - 您不必担心创建一个刚开始编码的数据库。适合来自没有太多 DBA 经验的编程背景的开发人员。它还具有自动数据库更新功能,因此每当您更改模型时,数据库也会自动更新。
    • POCOs - 代码更加简洁,您最终不会遇到大量自动生成的代码。您可以完全控制自己的每个课程。
    • 简单 - 您没有要更新或维护的 edmx 模型

    更多信息见Code-first vs Model/Database-first 在这里Code-First or Database-First, how to choose?

    【讨论】:

    • 诚实地为属性和元数据编写 c# 代码会导致引用速度较慢且难以管理,因为没有超过 10 个属性,这很可能发生。至于代码是生成的,我不在乎它看起来有多脏。自动更新数据库,这听起来很有趣,我会检查一下。
    • 糟糕的映射功能使 CodeFirst 无效,因为您的数据库将始终反映您的实体...
    【解决方案2】:

    在 EntityFramework 4.3 中为 CodeFirst 启用了迁移,所以 您可以轻松地将更改从模型更新到数据库Reference 1

    详细视频:Complete Reference Video

    【讨论】:

      【解决方案3】:

      来自以数据为中心的方法,我总是觉得人们喜欢在代码优先方法中创建很奇怪。当我设计我的数据库时,我已经在考虑每个表是什么,就好像它们是类一样。它们如何链接在一起以及数据将如何流动。我可以通过数据库对整个系统进行映像。

      我一直被教导要从头开始工作,打好基础,其他一切都会随之而来。我为许多不同的公司创建了许多不同的系统,而我这样做的速度是基于这样一个事实,即一旦我有了一个强大的数据库模型,我就会运行我的自定义代码生成器来创建视图/存储过程以及我的 Controller/BusinessLayer/DataLayer,将所有这些放在一起,我所要做的就是创建前端。

      如果我必须首先在代码中创建整个系统以生成数据库以及所有其他项目,那么我会想象它需要更长的时间。我并不是说我在任何方面都是对的,我确信可能有更快、更有经验的系统开发方法,但到目前为止,我还没有找到。

      感谢您让我发言,希望我的观点对您有所帮助。

      【讨论】:

      • 我发现代码优先绝对没用,我们要么准备好数据库,要么使用数据库工具轻松创建数据库,并且我们有读取数据库并生成代码优先模型的文本模板。数据库设计者更容易可视化和更改。最重要的是,您拥有完全的控制权。
      • 如果有人接触过 .Net 框架,那么他/她可以先编写代码更快。但无论如何,主要区别在于对于小型应用程序,您可以先使用代码来获得更快的方法(尽管您可以先在 db 中更快,这也取决于您的心态和启动技能。)
      【解决方案4】:

      嗯,这取决于您的项目。我会尝试制作合成酶的一些想法:

      • 您可以完全控制实体类。它们不再生成,您不必更新 T4 模板或使用部分类……
      • EDMX 模型将在 EF7 中消失,取而代之的是 CodeFirst 模型。因此,请记住,如果您计划迁移到 EF,或者您有可以在不久的将来开始使用 EF7 的项目。
      • 在多个开发人员正在处理模型的情况下更容易进行合并 +/- 注释和映射应手动完成。我想说代码优先的方法看起来更轻(不那么臃肿),我们可以保持简单(视觉模型可以隐藏不需要的复杂性)。对 Fluent API 开放。
      • 您仍然可以通过 Power Tools 可视化模型,但该模型是只读的。对模型的任何更改都应该手动完成(甚至可以从头开始生成初始实体)。您没有部分模型(图表),但我们的模型应该足够小。
      • 似乎数据库优先与 SP 和函数结果更好地集成(在 EF6 中进行了一些改进)

      【讨论】:

        猜你喜欢
        • 2016-07-04
        • 2011-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-24
        • 2010-12-27
        • 2011-11-06
        • 2015-04-06
        相关资源
        最近更新 更多