Entity Framework - 迁移

在Entity Framework 5和以前版本的Entity Framework中,代码被拆分为作为.NET Framework一部分提供的核心库(主要是System.Data.Entity.dll)和其他库(主要是EntityFramework.dll)使用NuGet进行分发和发送,如下图所示.

DotNet Framework

在Entity Framework 6中,以前属于.NET框架的核心API也作为NuGet包的一部分发布和分发.

核心API

这是允许Entity Framework成为开源的必要条件.但是,因此,只要需要将应用程序从旧版本的Entity Framework迁移或升级到EF 6,就需要重建应用程序.

如果您的迁移过程非常简单应用程序使用DbContext,它在EF 4.1及更高版本中提供.但是如果您的应用程序是ObjectContext,则需要做更多的工作.

让我们看一下将现有应用程序升级到EF6所需的以下步骤.

第1步 : 第一步是针对.NET Framework 4.5.2及更高版本,右键单击您的项目并选择属性.

升级EF6

第2步 : 再次右键单击您的项目并选择Manage NuGet Packages ...

Manage NuGet Packages

第3步 : 在Online选项卡下,选择EntityFramework并单击Install.确保删除了对System.Data.Entity.dll的程序集引用.

当您安装EF6 NuGet包时,它应该自动从您的项目中删除对System.Data.Entity的任何引用.

第4步 : 如果您有使用EF Designer创建的任何模型,那么您还需要更新代码生成模板以生成EF6兼容代码.

步骤5 &减去;在edmx文件下的解决方案资源管理器中,删除现有的代码生成模板,通常将其命名为< edmx_file_name> .tt和< edmx_file_name> .Context.tt.

Edmx

第6步 : 在EF Designer中打开您的模型,右键单击设计图面并选择Add Code Generation Item ...

步骤7 : 添加适当的EF 6.x代码生成模板.

代码生成模板 <它还将自动生成EF6兼容代码.

如果您的应用程序使用EF 4.1或更高版本,您将无需更改代码中的任何内容,因为DbContext和Code First类型的命名空间没有改变.

但是如果您的应用程序使用的是旧版本的Entity Framework,那么以前在System.Data.Entity.dll中的类似ObjectContext的类型已被移动到新的命名空间.

第8步 : 您将需要更新您的using或Import指令以针对EF6进行构建.

命名空间更改的一般规则是将System.Data.*中的任何类型移动到System.Data.Entity .核心.*.以下是其中一些 :

  • System.Data.EntityException⇒System.Data .Entity.Core. EntityException

  • System.Data.Objects.ObjectContext⇒System.Data .Entity.Core. Objects.ObjectContext;

  • System.Data.Objects.DataClasses.RelationshipManager⇒System.Data .Entity.Core. Objects.DataClasses.RelationshipManager;

某些类型位于 Core 名称空间中,因为它们不能直接用于大多数基于DbContext的应用程序.

  • System.Data.EntityState⇒System.Data.Entity.EntityState

  • System.Data.Objects.DataClasses.EdmFunctionAttribute⇒System.Data.Entity.DbFunctionAttribute

您现有的Entity Framework项目将在Entity Framework 6.0中运行,不会有任何重大更改.