📜  Entity Framework-迁移

📅  最后修改于: 2020-11-21 07:28:01             🧑  作者: Mango


在Entity Framework 5和早期版本的Entity Framework中,代码在作为.NET Framework一部分提供的核心库(主要是System.Data.Entity.dll)之间进行了拆分,并分发了其他库(主要是EntityFramework.dll),并且如下图所示,使用NuGet附带。

点网框架

在Entity Framework 6中,以前作为.NET框架一部分的核心API也作为NuGet软件包的一部分进行了分发。

核心API

为了使Entity Framework成为开源,这是必要的。但是,因此,每当需要将应用程序从Entity Framework的较早版本迁移或升级到EF 6时,都需要重新构建应用程序。

如果您的应用程序使用EF 4.1和更高版本中随附的DbContext,则迁移过程非常简单。但是,如果您的应用程序是ObjectContext,则只需要很少的工作。

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

步骤1-第一步是针对.NET Framework 4.5.2,然后右键单击您的项目并选择属性。

升级EF6

步骤2-再次右键单击您的项目,然后选择管理NuGet软件包…

管理NuGet软件包

步骤3-在Online选项卡下,选择EntityFramework,然后单击Install。确保删除对System.Data.Entity.dll的程序集引用。

当您安装EF6 NuGet软件包时,它将自动为您从项目中删除对System.Data.Entity的所有引用。

步骤4-如果您有使用EF Designer创建的任何模型,则还需要更新代码生成模板以生成EF6兼容代码。

步骤5-在解决方案资源管理器中的edmx文件下,删除现有的代码生成模板,这些模板通常将分别命名为 .tt和 .Context.tt。

埃德克斯

步骤6-在EF Designer中打开模型,右键单击设计图面,然后选择添加代码生成项…。

步骤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.Core。*。以下是其中一些-

  • 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中运行,而无需进行任何重大更改。