将 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
.注意:这个类已经改名了;旧名称的类仍然存在并且有效,但现在被标记为已过时。
空间类(例如DbGeography
、DbGeometry
)已从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 服务。