Code First现有数据库与EF Designer到现有数据库

Chr*_*s H 22 entity-framework

我们正在开始一个新的大型企业项目.该数据库将是100多个表,我们将使用实体框架,Web API和MVC.

我的问题与解决方案的实体框架方面有关.我试图在以下之间做出选择:

  • 首先编码现有数据库
  • EF Designer到现有数据库(数据库优先)

我知道我们可以使用EF首先从代码生成数据库或从EF设计器生成数据库,但我们更喜欢完全控制数据库并以传统方式开发,因此我们排除了允许我们自动执行的EF选项生成数据库.

我在互联网上找到的与Code First相关的大部分内容都涉及创建新数据库然后使用代码迁移.当讨论首先讨论数据库时,讨论会支持EF Designer.此处的示例:代码优先与模型/数据库优先

我倾向于将Code First与现有数据库结合使用.

以下是我支持这个选项的考虑因素,我想知道是否还需要考虑其他事项,以及我的假设/想法是否正确.

首先编码到现有数据库

  • 将在开始时构建大量类,但我们可以从EF模型向导进行初始生成.
  • 然后可以使用任何自定义属性修改类,或者删除我们不需要的任何内容,而不是要求我们扩展任何类的EF Designer.
  • 缺点是数据库的任何更改都必须手动添加到我们的类中,这与使用允许轻松更新的设计器不同.

编辑:我想我在这方面很困惑.从阅读开始,看来Data First的正确方法是为所有自动生成的类创建部分类,然后作为"业务"层的一部分对部分类进行任何修改.因此,我的想法已经从支持Code First从数据库转变为使用EF Designer到现有数据库,然后创建了部分类.

Jot*_*aBe 24

在任何情况下,您都必须同步EDM(实体数据模型)和DB.您必须确保EDM与您的数据库完全兼容.如果没有,它将失败,无论它是Code First还是你使用Model.

唯一的区别是:

  • 使用设计器,您可以以图形方式执行此操作,并轻松设置属性,列名称等
  • 使用Code First,您必须使用约定,Fluent API或属性设置这些属性,列名称,数据类型等

使用Code First,唯一的优势是,一旦您同步Code First模型(请参阅"Code First也是EDM,但有限")和数据库,您可以开始使用迁移,并使用它们演化您的模型,稍后可以更容易地将更改应用于生产数据库(每当发布新版本时).使用图形模型,您无法使用迁移,必须直接从Visual Studio升级Db,或手动创建SQL DDL脚本.

Code First也是一个EDM,但缺少一些功能

如果使用Code First或绘制模型无关紧要,将生成EDM(实体数据模型).如果您习惯于设计数据库,那么使用设计器可能会更舒服.请注意以下EF Core(前EF7)的注意事项!.

但是,Code First生成的EDM有一些设计人员没有的限制.

Code First最突出的限制是,在设计器中,您可以轻松地从BD中映射用户定义的函数,例如标量和表值函数以及存储过程.Code First有更多限制.

在EF 6.1中,大多数这些限制都消失了,但是制作映射仍然有点困难.(事实上,截至2014年,只有一个样本,以及一个简单的Nuget包,如何做到这一点.).

截至2017年3月,非核心EF,即EF 6.1,不再更新.如果出现错误,MS可能会解决错误(这是错误的:但不要指望进一步的改变)

新功能出现在6.2中:EF 6.2中的新功能,其中包括使用Fluent API定义索引,支持Like,支持非身份数据库生成的密钥,SEQUENCE以及其他一些更改

EF Core,前EF7的变化(截至2015年5月)

目前微软正在开发EF 7,但它也在维护EF 6.x. 目前的建议是继续使用EF 6一段时间,因为EF 7还不够成熟.

EF 7正在从头开发,以克服继承的ObjectContext,这对实现新功能构成了可怕的限制.但它实现了最广泛使用的DbContext,几乎没有变化.所以,如果你使用DbContext,你将有一个简单的migraiton路径到新的EF版本.

然而,有一个非常重要的变化:在EF Core(以前的EF7)中,EDM模型消失了对Code First模型的支持.因此,如果您想使用当今的技术并确保轻松升级到新版本,请不要使用Model First或Database First:使用Code First.微软做出这一决定有很重要的原因:Code First在具有版本控制的团队环境中工作得更好,并允许使用迁移.无论如何,tou仍然可以以图形方式(使用Power Toools)查看模型,或使用第三方工具使用设计器创建模型(当前的几种商业解决方案将支持EF7).

注意:为什么在团队环境中Code First要好得多?如果几个团队成员修改模型,那么在几个代码文件中合并更改要比在大型XML文件中合并更多,其中包含许多定义模型的行.理解这个休闲XML文件中版本之间的变化也更加困难.对于中型或大型项目,我建议您尽快转到Code First