从实体框架5升级到6



在将我们的项目从使用实体框架5升级到实体框架6后(通过NuGets更新功能),我在生成的实体类上得到以下错误:

错误1命名空间"System.Data"中不存在类型或命名空间名称"Objects">
(是否缺少程序集引用?)

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

但是,文件是生成的,所以我需要在每次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

这是我关于如何成功将实体框架v5升级到v6的经验:

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

缩写:

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

检查表:

  1. EF5内置在.NET4.5的核心中,而EF6已经被移出,并且是开源的。
    • 这意味着您必须将新的EF6程序集添加到解决方案中的所有相关项目,特别是入口项目
    • 这意味着您必须从所有项目中删除程序集System.Entity,因为这指的是EF5
  2. EF5有一个.dll"EntityFramework.dll",而EF6有两个.dll:
    • EntityFramework
    • EntityFramework.SqlServer
  3. EF6需要更改app.config。进行这些更改的最佳方法是右键单击解决方案,选择"Manage NuGet Packages for Solution",搜索"EntityFramework",然后将EntityFramework v6.1.0安装到所有相关项目中,尤其是入口项目中。请确保从所有项目中卸载任何用于EF5 Framework的NuGet包。这将自动更新你的app.config文件,使其正确无误
  4. 检查所有app.config文件中是否存在对EF5的引用,然后将其删除
  5. 命名空间已更改:
    • 删除C#行using System.Data.EntityClient;,它是EF5引用
    • 添加C#行using System.Data.Entity.Core.EntityClient;,这对于EF6是正确的

仍然卡住?这个清单是一个社区Wiki,请随意编辑这个清单,以帮助其他仍在用EF6配置的砖墙砸脑袋的倒霉鬼。

更新2016-02-15

在考虑EF之前,请探索其他选择。它比其他选项慢100倍,它提供的功能过于复杂,实体GUI充满了漏洞,存在奇怪的可用性问题,我们将不得不删除所有的EF6代码,并用不到5分钟的时间在Dapper中进行5秒的查询来替换它。

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

这项工作对我来说是按照以下步骤进行的。

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

Microsoft有一个升级到EF6的页面:https://learn.microsoft.com/en-us/ef/ef6/what-is-new/upgrading-to-ef6

注意:这可能与金基元上面显示的内容相同,但该链接不再有效。

相关内容

  • 没有找到相关文章

最新更新