从 Entity Framework 5 升级到 6

Posted

技术标签:

【中文标题】从 Entity Framework 5 升级到 6【英文标题】:Upgrade from Entity Framework 5 to 6 【发布时间】:2014-03-20 17:59:33 【问题描述】:

在将我们的项目从使用 Entity Framework 5 升级到 Entity Framework 6(尽管 NuGets 更新功能)后,我在生成的 Entities 类上收到以下错误:

错误 1 ​​命名空间“System.Data”中不存在类型或命名空间名称“Objects” (您是否缺少程序集参考?)

我知道这是因为命名空间已更改,我可以通过更改我的导入来手动修复错误: using System.Data.Objects;using System.Data.Objects.DataClasses; 到: using System.Data.Entity.Core.Objects;

但是文件是生成的,所以我需要在每个Update model from Database 之后重新应用此修复程序。 要让 EF 生成没有此错误的模型,是否需要进行额外更改。

【问题讨论】:

查看此链接msdn.microsoft.com/en-us/library/upgradeef6.aspx @KimKiWon 不幸的是,该链接不再有效,但我希望它指的是这篇文章或类似的东西:docs.microsoft.com/en-us/ef/ef6/what-is-new/upgrading-to-ef6 【参考方案1】:

我认为您的问题是,生成实体和上下文的 T4 模板仍在 EF 版本 5 中。

首先你必须删除当前代码生成项,它们在模型后面的代码中,即<Modelname>.Context.tt<Modelname>.tt。接下来添加一个新的EF版本6代码生成器Right click in the model designer-> Add Code Generation Item ... -> EF 6.x DbContext Generator

【讨论】:

对我来说,在我更改了我的高级系统设置http://***.com/questions/19664833/metadata-file-not-found-data-entity-model 并按照本文所述更改了 .tt 文件版本之后,它起作用了,谢谢。 这对我也有用,但在安装 VS2012 工具之前,我没有可用的 EF 6.x DbContext Generator 对象。从以下网址获取它们:microsoft.com/en-us/download/details.aspx?id=40762 我还必须删除 .Context.cs【参考方案2】:

这是我如何成功将 Entity Framework v5 升级到 v6 的经验:

SQL 服务器。 C# 和 Visual Studio 2012。 数据库优先。

首字母缩略词:

EF5 = 实体框架 v5。 EF6 = 实体框架 v6。

清单:

    EF5 内置于 .NET 4.5 的核心中,而 EF6 已被移出,并且是开源的。 这意味着您必须将新的 EF6 程序集添加到解决方案中的所有相关项目,尤其是入口项目。 这意味着您必须从所有项目中删除程序集 System.Entity,因为这指的是 EF5。 EF5 有一个 .dll “EntityFramework.dll”,而 EF6 有两个 .dll: 实体框架 EntityFramework.SqlServer EF6 需要更改 app.config。进行这些更改的最佳方法是右键单击解决方案,选择“管理解决方案的 NuGet 包”,搜索“EntityFramework”并将 Entity Framework v6.1.0 安装到所有相关项目中,特别是入口项目。确保从所有项目中卸载任何适用于 EF5 框架的 NuGet 包。这将自动更新您的 app.config 文件,使其正确无误。 检查所有 app.config 文件以查找对 EF5 的引用,然后将其删除。 命名空间已更改: 删除 C# 行 using System.Data.EntityClient;,这是一个 EF5 引用。 添加适用于 EF6 的 C# 行 using System.Data.Entity.Core.EntityClient;

还是卡住了?此清单是一个社区 Wiki,请随时编辑此清单以帮助其他仍在为 EF6 配置碰壁的倒霉蛋。

2016 年 2 月 15 日更新

在考虑 EF 之前,请先探索其他选项。它比其他选项慢 100 倍,它提供的内容非常复杂,实体 GUI 充满了错误并且存在奇怪的可用性问题,我们将不得不删除所有 EF6 代码并用需要的东西替换它不到 5 分钟就可以在 Dapper 中进行 5 秒的查询。

【讨论】:

我正在尝试将 MVC3 项目升级到 MVC5。升级很顺利。但是,卡在代码生成上。尝试了互联网上可用的所有说明。尝试过 T4,尝试过 Legacy 代码生成。但它只是不会生成代码。使用 EF 6.1.3。所有的参考都是有序的。 Nuget 升级并更新了所有程序集。检查并重新检查配置。一切看起来都不错,但没有代码生成。是否有跟踪文件或日志文件可供我查看以查看问题所在? Visual Studio 中有一个选项“重新生成 T4 模板”。这将从 Entity Framework 生成的 T4 模板自动生成 C#。 Visual Studio 中有一个已知错误,这意味着如果 T4 模板发生更改,这些 T4 模板并不总是自动生成它们的 deoendent C# 代码,尤其是当 T4 模板被转移到解决方案资源管理器中的子文件夹时。 我收到此错误...在将转换应用于“App.config”时发生错误...解决方法是删除 5.0,重命名 app.config 文件,删除应用程序.config 从您的 VisualStudio 项目。使用包管理器添加 EF6 或其他内容,然后使用重命名的重新调整它生成的新 app.config。【参考方案3】:

我知道现在回答这个问题有点晚了,但是。

按照以下步骤为我完成这项工作。

从现有的 abc.tt 文件中复制代码。 删除 abc.tt 文件。 将所有代码再次复制到 ABC.tt 文件中。 复制代码后,只需保存文件并构建解决方案,它也会重新生成完整的 .cs 文件

【讨论】:

【参考方案4】:

微软有一个关于升级到 EF6 的页面:https://docs.microsoft.com/en-us/ef/ef6/what-is-new/upgrading-to-ef6

注意:这可能与上面@Kim Ki Won 显示的内容相同,但该链接不再有效。

【讨论】:

以上是关于从 Entity Framework 5 升级到 6的主要内容,如果未能解决你的问题,请参考以下文章

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

使用 Entity Framework 5 将大量数据从旧数据库移动到新数据库

如何在 ASP.NET 5 中将 Entity Framework 6 与 MySQL 一起使用?

如何将带有 EntityState 和值的查询从 Entity Framework 5 转换为 6?

Entity Framework 5,多个模型,相同的实体

如何关闭 Entity Framework Core 5 中的所有约定