CodeFirst相比Database First有什么优势?

7
我正在观看有关EF 4.1的视频和教程,但我不明白CodeFirst有什么好处(除非DB非常小,只有3-4个表格,而且我懒得先创建DB)。
迄今为止,最好的方法是在某种数据库编辑器中创建数据库,这肯定比在实体模型中进行编辑要快, EF可以正确地捕捉每个关系并创建关联。我知道名称约定等方面存在挑战,但我感觉管理Code First非常令人困惑,因为所有内容都像代码一样,并且编码的工作量太大。
CodeFirst能做什么,Db first做不了呢?
4个回答

22

CodeFirst(代码优先)不能做到DB first(数据库优先)所不能做到的。归根结底,它们都是使用 Entity Framework(实体框架)。

使用 CodeFirst 的主要优势有:

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

更多信息请参见Code-first vs Model/Database-firstCode-First or Database-First, how to choose?


2
说实话,当属性数量超过10个时,编写C#代码以处理属性和元数据会变得更加缓慢和难以管理,而这种情况很可能发生。就生成的代码而言,我不在乎它看起来有多么混乱。自动更新数据库听起来很有趣,我会去了解一下。 - Akash Kava
映射能力差会使CodeFirst失效,因为你的数据库将始终反映你的实体... - Rénald

9

作为一个数据中心的方法,我总觉得奇怪的是人们喜欢采用“代码优先”方法创建。当我设计我的数据库时,我已经在考虑每个表格是如何关联的,以及数据流如何流通,就好像它们是类一样。我可以通过数据库想象整个系统。

我一直被教导从底层开始工作,把基础打好,其他所有内容都会随之而来。我为许多不同的公司创建了很多不同的系统,之所以能做到速度快,是因为一旦我有了强大的数据库模型,然后运行我的定制代码生成器,为我创建视图/存储过程以及我的控制器/业务层/数据层,将所有这些组合起来,然后只需创建前端。

如果我必须首先使用代码创建整个系统来生成数据库,以及所有其他项目,那么我想象它会花费更长的时间。我并不是说我是对的,在任何方面都不是,我相信可能有更快和更有经验的开发系统的方法,但迄今为止,我还没有发现一种。

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


2
我发现Code First完全没用,我们要么有准备好的数据库,要么使用数据库工具轻松创建数据库,并且我们有文本模板可以读取数据库并生成Code First模型。数据库设计师更容易可视化和修改。最重要的是,你拥有完全的控制权。 - Akash Kava
如果有人熟练掌握 .Net 框架,那么他/她在使用 Code First 方式编码时会更快。但无论如何,对于小型应用程序,您可以使用 Code First 来实现更快的方法(尽管您也可以在 Db First 中更快地完成所有操作,这取决于您的思维方式和启动技能)。 - Dhiren

2

EntityFramework 4.3针对CodeFirst启用了迁移功能,因此您可以轻松地将模型中的更改无缝更新到数据库参考文献1

详细视频:完整参考视频


1

好的,这取决于您的项目。我会尝试综合一些想法:

  • 您可以完全控制实体类。它们不再是自动生成的,您不必更新T4模板或使用部分类...
  • 在EF7中,EDMX模型将消失,改为CodeFirst模型。因此,请记住,如果您计划迁移到EF,或者您有即将开始使用EF7的项目,
  • 在多个开发人员共同处理模型时,更容易进行合并 +/-注释和映射应该手动完成。我认为代码优先方法似乎更轻(减少膨胀),我们可以保持简单(可视化模型可以隐藏不需要的复杂性)。接受Fluent API。
  • 您仍然可以通过Power Tools可视化模型,但模型是只读的。对模型的任何更改都应该手动完成(即使最初的实体也可以从头开始生成)。您没有部分模型(图表),但我们的模型应该足够小。
  • 似乎数据库优先与SP和函数结果更好地集成(在EF6中已经做出了一些改进)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接