从entity framework5升级到6

将我们的项目从使用entity framework5升级到entity framework6(尽pipeNuGets更新函数)后,我在我生成的实体类上得到以下错误:

错误1名称空间“System.Data”中不存在types或名称空间名称“对象”
(你是否缺less程序集引用?)

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

然而,该文件生成,所以我需要重新应用此修复程序后, Update model from Database每个Update model from Database 。 有没有什么额外的改变,让EF生成没有这个错误的模型。

我认为你的问题是,你的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

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

  • SQL Server。
  • C#和Visual Studio 2012。
  • 数据库第一。

缩略语:

  • EF5 =entity frameworkv5。
  • EF6 =entity frameworkv6。

清单:

  1. EF5内置于.NET 4.5的核心,而EF6已经被移出,并且是开源的。
    • 这意味着您必须将新的EF6组件添加到解决scheme中的所有相关项目中,尤其是入口项目。
    • 这意味着您必须从所有项目中删除程序集System.Entity ,因为这涉及到EF5。
  2. EF5有一个.dll“EntityFramework.dll”,而EF6有两个.dll:
    • 的EntityFramework
    • EntityFramework.SqlServer
  3. EF6需要更改到app.config。 进行这些更改的最佳方法是右键单击解决scheme,select“为解决schemepipe理NuGet包”,search“EntityFramework”并将Entity Framework的v6.1.0安装到所有相关项目中,特别是入口项目。 确保从所有项目中卸载EF5 Framework的任何NuGet包。 这会自动更新你的app.config文件,所以他们是正确的。
  4. 检查所有的app.config文件,以引用EF5,并删除它们。
  5. 命名空间已经改变:
    • using System.Data.EntityClient;删除C#行using System.Data.EntityClient; ,这是一个EF5参考。
    • using System.Data.Entity.Core.EntityClient;添加C#行using System.Data.Entity.Core.EntityClient; 这对于EF6是正确的。

仍然卡住? 这个清单是一个社区维基,随时编辑这个清单,以帮助其他倒霉的灵魂仍然撞在可以是EF6configuration的砖墙。

更新2016-02-15

在考虑EF之前请探索其他选项。 它的速度比其他选项慢100倍,对于它所提供的内容来说,它是非常复杂的,实体GUI充满了错误,并且存在奇怪的可用性问题,我们将不得不撕掉所有的EF6代码,并将其replace为不到5分钟就可以在Dapper中做5秒的查询。