我正在使用实体,C#和SQL Server来创建一个n层应用程序。我正在创建一些我所有DAL组件共有的基类。在这个基类中,我想处理实体对象继承的ObjectContext基类的连接状态。
编译会抛出以下错误:
类型或命名空间名称'Objects' 在命名空间中不存在 'System.Data'(你错过了吗? 装配参考?)
此外,using语句System.Data.Objects因同样的原因无法解析。
我尝试添加程序集作为参考,但在程序集引用的.NET选项卡中找不到它。
有什么想法?谢谢!
答案 0 :(得分:196)
您需要添加对.NET程序集System.Data.Entity.dll的引用。
答案 1 :(得分:50)
如果您使用的是Entity Framework 6,则名称空间已更改。你想用
System.Data.Entity.Core.Objects.ObjectQuery
答案 2 :(得分:31)
从EF5升级到EF6,不久前就遇到了这个问题。我通过更新生成的代码来引用System.Data.Entity.Core.Objects
来临时修复它,但是在生成之后它会再次更改(正如预期的那样生成)。
这解决了这个问题:
http://msdn.microsoft.com/en-us/data/upgradeef6
如果您使用EF Designer创建了任何模型,则需要更新代码生成模板以生成与EF6兼容的代码。 注意: 目前只有Visual Studio 2012和2013可用的EF 6.x DbContext Generator模板。
- 删除现有的代码生成模板。这些文件通常命名为< edmx_file_name> .tt 和< edmx_file_name> .Context.tt ,并嵌套在解决方案资源管理器中的edmx文件下。您可以在解决方案资源管理器中选择模板,然后按 Del 键将其删除 注意: 在网站项目中,模板不会嵌套在您的edmx文件下,而是在解决方案资源管理器中与它一起列出。
注意: 在VB.NET项目中,您需要启用“显示所有文件”才能看到嵌套的模板文件。- 添加适当的EF 6.x代码生成模板。在EF Designer中打开模型,右键单击设计图面并选择添加代码生成项...
- 如果您使用的是DbContext API(推荐),则数据标签下会显示 EF 6.x DbContext Generator 。
注意: 如果您使用的是Visual Studio 2012,则需要安装EF 6工具才能拥有此模板。有关详细信息,请参阅Get Entity Framework。- 如果您使用的是ObjectContext API,则需要选择在线标签并搜索 EF 6.x EntityObject Generator 。
- 如果您将任何自定义应用于代码生成模板,则需要将其重新应用于更新的模板。
醇>
答案 3 :(得分:3)
VS 2013中的相同问题
我在Web.config中添加了:
<add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
它就像一个魅力。
答案 4 :(得分:3)
在我的EF 6+案例中,使用时:
System.Data.Entity.Core.Objects.ObjectQuery
作为此命令的一部分:
var sql = ((System.Data.Entity.Core.Objects.ObjectQuery)query).ToTraceString();
我收到了这个错误:
Cannot cast 'query' (which has an actual type of 'System.Data.Entity.Infrastructure.DbQuery<<>f__AnonymousType3<string,string,string,short,string>>') to 'System.Data.Entity.Core.Objects.ObjectQuery'
所以我最终不得不使用它:
var sql = ((System.Data.Entity.Infrastructure.DbQuery<<>f__AnonymousType3<string,string,string,short,string>>)query).ToString();
当然,您的匿名类型签名可能不同。
HTH。
答案 5 :(得分:2)
如果你想使用&#34; System.Data.Objects.EntityFunctions&#34;
使用&#34; System.Data.Entity.DbFunctions&#34;在EF 6.1 +
中答案 6 :(得分:0)
我为System.Data.Linq添加了对.dll文件的引用, 以上是不够的。你可以在各种目录中找到.dll 对于以下版本。
将System.Data.Linq C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ v3.5 \ System.Data.Linq.dll 3.5.0.0
将System.Data.Linq C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ Profile \ Client \ System.Data.Linq.dll 4.0.0.0
答案 7 :(得分:0)
您需要添加对.NET程序集System.Data.Linq
的引用