在将我们的项目从使用实体框架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
检查表:
- EF5内置在.NET4.5的核心中,而EF6已经被移出,并且是开源的。
- 这意味着您必须将新的EF6程序集添加到解决方案中的所有相关项目,特别是入口项目
- 这意味着您必须从所有项目中删除程序集System.Entity,因为这指的是EF5
- EF5有一个.dll"EntityFramework.dll",而EF6有两个.dll:
- EntityFramework
- EntityFramework.SqlServer
- EF6需要更改app.config。进行这些更改的最佳方法是右键单击解决方案,选择"Manage NuGet Packages for Solution",搜索"EntityFramework",然后将EntityFramework v6.1.0安装到所有相关项目中,尤其是入口项目中。请确保从所有项目中卸载任何用于EF5 Framework的NuGet包。这将自动更新你的app.config文件,使其正确无误
- 检查所有app.config文件中是否存在对EF5的引用,然后将其删除
- 命名空间已更改:
- 删除C#行
using System.Data.EntityClient;
,它是EF5引用 - 添加C#行
using System.Data.Entity.Core.EntityClient;
,这对于EF6是正确的
- 删除C#行
仍然卡住?这个清单是一个社区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
注意:这可能与金基元上面显示的内容相同,但该链接不再有效。