“Database First”和“Code First to Existing Database”在Entity Framework中有什么区别?

3

我刚刚观看了关于EF6.1中新的“Code First to Existing Database”功能的MSDN视频。

http://channel9.msdn.com/Blogs/EF/Code-First-to-Existing-Database-EF6-1-Onwards-

然而,作为EF的新手,我发现它似乎是从数据库生成POCO模型类,这正是我理解的“基于数据库优先”的含义(我认为“数据库优先”与“代码优先”的相反)。两者有何区别?它们都是“数据库优先”!

这里已经有一个很好的解释了,不需要在这里重复回答。Code-first vs Model/Database-first - mason
使用现有数据库的 Code First 并不是什么新鲜事。请参阅 Scott Guthrie 的此博客 - Habib
1
EF 6.1中的新功能只是用于从数据库反向工程实体类的新工具。这个功能以前就有了,现在只是有了一个点和点击的方式来完成它。 - JC Ford
1
@Anthony - 这个功能在 Entity Framework Power Tools 中已经存在很长时间了,但在 6.1 版本中已经被整合到 EF 工具中。 - Erik Funkenbusch
啊 - 现在变得更清晰了... - Anthony
显示剩余2条评论
1个回答

10

Code First 有点不准确... 它真正应该被称为 "基于代码的模型" vs "基于XML的模型"。

Code First 根据类中的属性和/或代码中的流畅映射创建一个基于内存的模型。

而数据库和模型优先根据 .EDMX 文件创建一个基于内存的模型,然后再用它来生成类。

也就是说,Code First 使用代码作为其模型。数据库和模型优先使用 EDMX 文件作为其模型。对于现有数据库,Code First 只生成 Code First 类(属性和/或流畅映射),而数据库优先生成一个 EDMX 文件,然后通过 T4 模板生成类。


当你从现有的数据库开始时,“Code First”只是一个错误的称呼。从头开始一个新项目,创建实体类并让EF为您生成数据库才是“Code First”的含义,这不是一个错误的称呼。 - JC Ford
@JC。- 你总是可以从数据库开始。事实上,我从未使用过Code First的数据库生成部分,但Code First是我所使用的全部内容。仅仅因为你可以从Code First开始,并不意味着它准确地描述了它是什么。 - Erik Funkenbusch
直到现在,Visual Studio缺乏从数据库创建“代码优先”类的内置工具,但这并不重要。Code-First之所以被命名为如此,是因为它的过程是编写普通类,并从中生成数据库。 - JC Ford
@JC - 它被命名为 Code First 是因为已经存在“Database First”和“Model First”等名称,并且选择与这种方法相适应。EF Power Tools 已经存在多年,由完成此工作的 EF 团队维护。因此,说这些工具不存在是不正确的。 - Erik Funkenbusch

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