实体框架 – 迁移
实体框架 – 迁移
在 Entity Framework 5 和以前版本的 Entity Framework 中,代码在作为 .NET Framework 一部分提供的核心库(主要是 System.Data.Entity.dll)之间拆分,并且附加库(主要是 EntityFramework.dll)被分发和使用 NuGet 提供,如下图所示。
在实体框架 6 中,以前是 .NET 框架一部分的核心 API 也作为 NuGet 包的一部分提供和分发。
这是允许 Entity Framework 开源的必要条件。但是,因此,每当需要将应用程序从旧版本的实体框架迁移或升级到 EF 6 时,都需要重新构建应用程序。
如果您的应用程序使用 DbContext(在 EF 4.1 及更高版本中提供),则迁移过程很简单。但是,如果您的应用程序是 ObjectContext,则只需要做更多的工作。
让我们来看看将现有应用程序升级到 EF6 需要执行的以下步骤。
步骤 1 – 第一步是针对 .NET Framework 4.5.2 和更高版本,右键单击您的项目并选择属性。
第 2 步– 再次右键单击您的项目并选择管理 NuGet 包…
步骤 3 – 在在线选项卡下选择 EntityFramework 并单击安装。确保删除对 System.Data.Entity.dll 的程序集引用。
当您安装 EF6 NuGet 包时,它应该会自动为您从您的项目中删除对 System.Data.Entity 的任何引用。
第 4 步– 如果您有任何使用 EF 设计器创建的模型,那么您还需要更新代码生成模板以生成 EF6 兼容代码。
第 5 步– 在 edmx 文件下的解决方案资源管理器中,删除现有的代码生成模板,这些模板通常命名为 <edmx_file_name>.tt 和 <edmx_file_name>.Context.tt。
第 6 步– 在 EF 设计器中打开您的模型,右键单击设计图面并选择添加代码生成项…
步骤 7 – 添加适当的 EF 6.x 代码生成模板。
它还将自动生成 EF6 兼容代码。
如果您的应用程序使用 EF 4.1 或更高版本,则不需要更改代码中的任何内容,因为 DbContext 和 Code First 类型的命名空间没有更改。
但是,如果您的应用程序使用旧版本的实体框架,那么之前在 System.Data.Entity.dll 中的 ObjectContext 等类型已被移动到新的命名空间。
第 8 步– 您需要更新 using 或 Import 指令以针对 EF6 进行构建。
命名空间更改的一般规则是 System.Data.* 中的任何类型都移动到 System.Data.Entity.Core.*。以下是其中一些 –
- System.Data.EntityException ⇒ System.Data .Entity.Core。实体异常
- 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 中运行,无需任何重大更改。