Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 将第一个现有数据库vs EF设计器编码到现有数据库_Entity Framework - Fatal编程技术网

Entity framework 将第一个现有数据库vs EF设计器编码到现有数据库

Entity framework 将第一个现有数据库vs EF设计器编码到现有数据库,entity-framework,Entity Framework,我们正在启动一个新的大型企业项目。数据库将是100多个表,我们将使用实体框架、Web API和MVC 我的问题具体涉及解决方案的实体框架方面。 我试图在以下两者之间做出选择: 首先对现有数据库进行编码 现有数据库的EF设计器(数据库优先) 我知道我们可以使用EF从代码或EF设计器生成数据库,但我们更喜欢完全控制数据库并以传统方式开发,因此我们排除了允许自动生成数据库的EF选项 我在互联网上找到的大部分与代码相关的内容首先涉及创建一个新的数据库,然后使用代码迁移。当讨论首先涉及数据库时,讨论有

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

我的问题具体涉及解决方案的实体框架方面。 我试图在以下两者之间做出选择:

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

我在互联网上找到的大部分与代码相关的内容首先涉及创建一个新的数据库,然后使用代码迁移。当讨论首先涉及数据库时,讨论有利于EF设计师。示例如下:

我的偏好是先将代码组合到现有数据库

下面是我对这个选择的考虑,我想知道我还有什么需要考虑的,以及我的假设和想法是否正确。

首先对现有数据库进行编码

  • 一开始会有大量的类需要构造,但是我们可以从EF模型向导进行初始生成
  • 然后可以使用任何自定义属性修改这些类,或者删除我们不需要的任何内容,而不是需要我们扩展任何类的EF设计器
  • 缺点是对数据库的任何更改都必须手动添加到我们的类中,这与使用设计器不同,后者允许轻松更新
编辑: 我想我在这方面有些困惑。从阅读中可以看出,首先处理数据的正确方法是为所有自动生成的类创建分部类,然后作为“业务”层的一部分对分部类进行任何修改。
因此,我的想法已经从偏爱数据库中的代码转变为使用EF设计器对现有数据库进行设计,然后创建分部类。

在任何情况下,您都必须同步EDM(实体数据模型)和DB。您必须确保EDM与数据库完全兼容。否则,无论是先编写代码还是使用模型,它都将失败

唯一的区别是:

  • 使用设计器,您可以以图形方式完成此操作,并且可以轻松地设置属性、列名等
  • 首先使用代码,您必须使用约定、Fluent API或属性设置这些属性、列名、数据类型等
使用Code First,唯一的优势是,一旦您同步了Code First模型(请参阅“Code First也是EDM,但有一定的局限性”)和数据库,您就可以开始使用迁移,并使用迁移来改进您的模型,这样以后就可以更容易地将更改应用到生产数据库(每当发布新版本时)。对于图形模型,您不能使用迁移,必须直接从VisualStudio升级数据库,或者手动创建SQLDDL脚本

CodeFirst也是一个EDM,但缺少一些功能 无论是先使用代码还是绘制模型,都会生成EDM(实体数据模型)。如果您习惯于设计数据库,那么使用设计器可能会更舒服。请注意下面有关EF Core(原EF7)的注释

然而,首先由代码生成的EDM有一些设计者没有的限制

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

在EF 6.1中,大多数限制都消失了,但映射仍然有点困难。(事实上,截至今天,2014年,以及如何进行映射。)

截至2017年3月,不再更新非核心环境足迹,即环境足迹6.1。MS可能会解决出现的bug(这是错误的:但不要期待进一步的更改)

6.2:中出现了新功能,其中包括使用Fluent API定义索引,支持
,支持非身份数据库生成的键,如
序列
,以及一些其他更改

EF核心的变化,前EF7(截至2015年5月) 目前微软正在开发EF7,但同时也在维护EF6.x。目前的建议是继续使用EF6一段时间,因为EF7还不够成熟

EF7是从零开始开发的,以克服继承的ObjectContext对实现新特性造成的严重限制。但是它实现了使用最广泛的DbContext,几乎没有什么变化。因此,如果您使用DbContext,您将很容易地迁移到EF的新版本

然而,有一个非常重要的变化:在EF核心(前EF7)中,EDM模型逐渐消失,取而代之的是代码优先模型。因此,如果您想使用当今的技术并确保轻松升级到新版本,不要先使用模型或数据库:先使用代码。微软做出这一决定有很多重要原因:CodeFirst在有版本控制的团队环境中工作得更好,并允许进行迁移。无论如何,tou仍然可以以图形方式(使用Power Toools)查看模型,或者使用第三方工具使用设计器创建模型(当前的一些商业解决方案将支持EF7)

注意:为什么团队环境中更好的代码优先?如果几个团队成员修改了模型,那么在几个代码文件中合并更改要比在一个大的XML文件中合并更改容易得多,因为它有很多行定义了模型。在这个hugh XML文件中,理解版本之间的更改也要困难得多。