名称空间'System.Data'中不存在类型或命名空间名称'Objects'

时间:2009-08-13 22:43:34

标签: c# .net visual-studio-2008 linq-to-entities entities

我正在使用实体,C#和SQL Server来创建一个n层应用程序。我正在创建一些我所有DAL组件共有的基类。在这个基类中,我想处理实体对象继承的ObjectContext基类的连接状态。

编译会抛出以下错误:

  

类型或命名空间名称'Objects'   在命名空间中不存在   'System.Data'(你错过了吗?   装配参考?)

此外,using语句System.Data.Objects因同样的原因无法解析。

我尝试添加程序集作为参考,但在程序集引用的.NET选项卡中找不到它。

有什么想法?谢谢!

8 个答案:

答案 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模板。

     
      
  1. 删除现有的代码生成模板。这些文件通常命名为< edmx_file_name> .tt < edmx_file_name> .Context.tt ,并嵌套在解决方案资源管理器中的edmx文件下。您可以在解决方案资源管理器中选择模板,然后按 Del 键将其删除    注意: 在网站项目中,模板不会嵌套在您的edmx文件下,而是在解决方案资源管理器中与它一起列出。
       注意: 在VB.NET项目中,您需要启用“显示所有文件”才能看到嵌套的模板文件。
  2.   
  3. 添加适当的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
    •   
  4.   
  5. 如果您将任何自定义应用于代码生成模板,则需要将其重新应用于更新的模板。
  6.   

答案 3 :(得分:3)

VS 2013中的相同问题

我在Web.config中添加了:

<add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />

它就像一个魅力。

我在页面上找到了它: http://www.programmer.bz/Home/tabid/115/asp_net_sql/281/The-type-or-namespace-name-Objects-does-not-exist-in-the-namespace-SystemData.aspx

答案 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

的引用