将 EF 4 EDMX 升级到 EF 6

Posted

技术标签:

【中文标题】将 EF 4 EDMX 升级到 EF 6【英文标题】:Upgrade EF 4 EDMX to EF 6 【发布时间】:2013-10-30 01:50:02 【问题描述】:

我的应用程序在 EF 4 中首先使用数据库 EDMX。我想将所有内容升级到 EF 6。在使用 NuGet 获得 EF 6 后,我不得不对使用我的 EF 模型的类进行大量更改,因为EF 6 中的命名空间已更改。然后我意识到,我的 EDMX 生成的代码也使用了错误的命名空间等。到目前为止,我没有使用自定义 T4。

如何将现有的 EDMX 升级到 EF 6。

谢谢。

【问题讨论】:

【参考方案1】:
    您删除了旧的 .tt 文件 您在设计器模式下打开您的 edmx 文件(这样您就可以看到您的模型) 右键单击空闲空间 选择添加代码生成项 在对话框中选择“EF 6.x DbContext Code Generation Item”(类似这样) 保存您的 edmx,将为您生成所有类,包括新的命名空间等等

【讨论】:

您需要重命名或移动您已经创建的任何部分类。我的偏好是重命名文件,例如从 Person.cs 到 Person.partial.cs。【参考方案2】:

除了 Rand Random 和 Dean Oliver 在这里给出的答案之外,让我提一下以下MSDN link,描述了升级到 EF6 的一般步骤。不要低估所需的手动步骤。 ..

路线图是(请参阅上面给出的链接中的详细信息):

    准备工作:安装Entity Framework 6 Tools for Visual Studio 2012/13

    安装 EF6 NuGet 包

    确保删除对 System.Data.Entity.dll 的程序集引用(注意:安装 EF6 NuGet 包应自动从项目中删除对 System.Data.Entity 的任何引用你)。

    交换任何 EF Designer (EDMX) 模型以使用 EF 6.x 代码生成注意事项:

    如果您之后收到消息“实体数据模型设计器无法显示您请求的文件”,请单击显示的文本消息“实体数据模型”中的链接修改 Designer ...您可以修改 ...”,这将显示表格。用Ctrl+A全选,然后按Del,然后右击选择“Update model from database”,最后用Ctrl+S。这将使用默认的 T4 模板“EF 6.x DbContext Generator”将模型更新到最新版本。 如果您在项目中使用过ObjectContext,那么您应该考虑下载模板"EF 6.x EntityObject Generator"。然后在模型设计器中右击,选择“添加代码生成项”,然后选择一个你还没用过的名字。它将生成正确的类,之后您必须删除所有旧的 ("*.tt") 文件和相关生成的类 ("*.cs") 文件。

    更新命名空间,为正在使用的任何核心 EF 类型,即

    System.Data.* 中的任何类型都移动到System.Data.Entity.Core.* System.Data.EntityState => System.Data.Entity.EntityState System.Data.Objects.DataClasses.EdmFunctionAttribute => System.Data.Entity.DbFunctionAttribute.注意:这个类已经改名了;旧名称的类仍然存在并且有效,但现在被标记为已过时。 System.Data.Objects.EntityFunctions => System.Data.Entity.DbFunctions.注意:这个类已经改名了;旧名称的类仍然存在并且有效,但现在被标记为已过时。 空间类(例如DbGeographyDbGeometry)已从System.Data.Spatial => System.Data.Entity.Spatial 移动

注意:

有关可用 EF 模板的更多信息,请访问here at MSDN.

如果您在升级到 EF6.x 后收到过时属性警告,请查看这篇 SO 文章:How to get rid of obsolete attribute warning?

【讨论】:

【参考方案3】:

以及 Rand Random 建议的步骤。如果您使用的是 VS2012,请记住为 Visual Studio 2012 安装 Entity Framework 6 Tools。 download here

这将确保 EF 6.x DbContext Generator 模板在单击第 4 步:添加代码生成项时显示

【讨论】:

以上是关于将 EF 4 EDMX 升级到 EF 6的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Database First Entity Framework 4 升级到 6

使用 Devart.MySql 将 EF6 升级到 EF Core 3

升级到 .NET 4.5 和 EF5。不再能够部署 WCF 服务。

升级到 EF 4.1 后的 System.NullReferenceException

如何从实体框架 4 升级到 EF6?

在 EF 4 上映射外键而不创建新的 Edmx 文件