Entity framework 将第一个现有数据库vs EF设计器编码到现有数据库
我们正在启动一个新的大型企业项目。数据库将是100多个表,我们将使用实体框架、Web API和MVC 我的问题具体涉及解决方案的实体框架方面。 我试图在以下两者之间做出选择:Entity framework 将第一个现有数据库vs EF设计器编码到现有数据库,entity-framework,Entity Framework,我们正在启动一个新的大型企业项目。数据库将是100多个表,我们将使用实体框架、Web API和MVC 我的问题具体涉及解决方案的实体框架方面。 我试图在以下两者之间做出选择: 首先对现有数据库进行编码 现有数据库的EF设计器(数据库优先) 我知道我们可以使用EF从代码或EF设计器生成数据库,但我们更喜欢完全控制数据库并以传统方式开发,因此我们排除了允许自动生成数据库的EF选项 我在互联网上找到的大部分与代码相关的内容首先涉及创建一个新的数据库,然后使用代码迁移。当讨论首先涉及数据库时,讨论有
- 首先对现有数据库进行编码
- 现有数据库的EF设计器(数据库优先)
- 一开始会有大量的类需要构造,但是我们可以从EF模型向导进行初始生成
- 然后可以使用任何自定义属性修改这些类,或者删除我们不需要的任何内容,而不是需要我们扩展任何类的EF设计器
- 缺点是对数据库的任何更改都必须手动添加到我们的类中,这与使用设计器不同,后者允许轻松更新
因此,我的想法已经从偏爱数据库中的代码转变为使用EF设计器对现有数据库进行设计,然后创建分部类。在任何情况下,您都必须同步EDM(实体数据模型)和DB。您必须确保EDM与数据库完全兼容。否则,无论是先编写代码还是使用模型,它都将失败 唯一的区别是:
- 使用设计器,您可以以图形方式完成此操作,并且可以轻松地设置属性、列名等
- 首先使用代码,您必须使用约定、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文件中,理解版本之间的更改也要困难得多。