从实体框架5升级到6

时间:2014-02-20 02:27:44

标签: c# entity-framework entity-framework-5 entity-framework-6 ef-database-first

将项目从使用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在没有此错误的情况下生成模型。

4 个答案:

答案 0 :(得分:62)

我认为您的问题是,生成权利和上下文的T4模板仍处于EF版本5中。

首先,您必须删除当前代码生成项,这些项位于模型的代码后面,即<Modelname>.Context.tt<Modelname>.tt。接下来添加一个新的EF版本6代码生成器{{1 }}

答案 1 :(得分:37)

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

  • SQL Server。
  • C#和Visual Studio 2012。
  • 数据库优先。

缩略语:

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

清单:

  1. EF5内置于.NET 4.5的核心,而EF6已经被移出,并且是开源的。
    • 这意味着您必须将新的EF6程序集添加到解决方案中的所有相关项目中,尤其是项目项目。
    • 这意味着您必须从所有项目中删除程序集System.Entity ,因为这是指EF5。
  2. EF5有一个.dll&#34; EntityFramework.dll&#34;,而EF6有两个.dll:
    • 的EntityFramework
    • EntityFramework.SqlServer
  3. EF6需要更改app.config。进行这些更改的最佳方法是右键单击解决方案,选择&#34;管理解决方案的NuGet包&#34;,搜索&#34; EntityFramework&#34;并将实体框架的v6.1.0安装到所有相关项目中,特别是入口项目。确保从所有项目中卸载EF5 Framework的任何NuGet包。这将自动更新您的app.config文件,使其正确无误。
  4. 检查所有app.config文件以获取对EF5的引用,然后将其删除。
  5. 命名空间已更改:
    • 删除C#行using System.Data.EntityClient;,这是EF5参考。
    • 添加适用于EF6的C#行using System.Data.Entity.Core.EntityClient;
  6. 仍然卡住?这个清单是一个社区维基,随时可以编辑这个清单,以帮助其他倒霉的灵魂,他们还在敲打可能是EF6配置的砖墙。

    更新2016-02-15

    在考虑EF之前,请先了解其他选项。它比其他选项慢100倍,它提供的内容非常复杂,实体GUI充满了错误并且具有奇怪的可用性问题,我们将不得不撕掉所有的EF6代码并用少于5分钟的代码替换它,以便在Dapper中进行5秒的查询。

答案 2 :(得分:0)

我知道现在回答这个问题太迟了。

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

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

答案 3 :(得分:0)

Microsoft提供了有关升级到EF6的页面:https://docs.microsoft.com/en-us/ef/ef6/what-is-new/upgrading-to-ef6

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

相关问题