类型或名称空间名称“对象”在名称空间“ System.Data”中不存在


101

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

编译将引发以下错误:

类型或名称空间名称“对象”在名称空间“ System.Data”中不存在(您是否缺少程序集引用?)

同样,由于相同的原因,使用语句System.Data.Objects也无法解析。

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

有什么想法吗?谢谢!

Answers:



52

如果使用的是Entity Framework 6,则名称空间已更改。你想用

System.Data.Entity.Core.Objects.ObjectQuery

我通过nuget软件包管理器安装了Entity Framework 6.1.3。我还没有引用Microsoft的程序集System.Data.Entity。它给了我错误。所以我的问题是,在添加using语句之前,我需要引用System.Data.Entity FIRST吗?
vibs2006 '17

31

从EF5升级到EF6已有一段时间,并且一直遇到此问题。我会通过将生成的代码更新为reference来临时修复它System.Data.Entity.Core.Objects,但是在生成之后,它将再次变回原来的样子(自生成以来,这是预期的)。

这样可以彻底解决问题:

http://msdn.microsoft.com/en-us/data/upgradeef6

如果您使用EF Designer创建了任何模型,则需要更新代码生成模板以生成EF6兼容代码。 注意:当前只有EF 6.x DbContext Generator模板可用于Visual Studio 2012和2013。

  1. 删除现有的代码生成模板。这些文件通常被命名为<edmx_file_name> .TT<edmx_file_name> .Context.tt下在解决方案资源管理您的EDMX文件嵌套。您可以在解决方案资源管理器中选择模板,然后Del按键将其删除。
    注意:在网站项目中,模板不会嵌套在edmx文件下,而是在解决方案资源管理器中列出。
    注意:在VB.NET项目中,您需要启用“显示所有文件”以查看嵌套的模板文件。
  2. 添加适当的EF 6.x代码生成模板。在EF设计器中打开模型,在设计图面上单击鼠标右键,然后选择“ 添加代码生成项...”。
    • 如果使用的是DbContext API(推荐),则EF 6.x DbContext Generator将在“ 数据”选项卡下可用。
      注意:如果使用的是Visual Studio 2012,则需要安装EF 6工具才能具有此模板。有关详细信息,请参见获取实体框架
    • 如果使用的是ObjectContext API,则需要选择“ 联机”选项卡并搜索EF 6.x EntityObject Generator
  3. 如果您对代码生成模板应用了任何自定义项,则需要将其重新应用于更新后的模板。


3

如果要使用“ System.Data.Objects.EntityFunctions”

在EF 6.1+中使用“ System.Data.Entity.DbFunctions”


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。


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)\参考程序集\ Microsoft \ Framework.NETFramework \ v4.0 \ Profile \ Client \ System.Data.Linq.dll 4.0.0.0


2
更正此问题的答案如下:类型或名称空间名称“ Linq”在名称空间“ System.Data”中不存在
Tom Cubbins

0

您需要添加对.NET程序集System.Data.Linq的引用


Null29,您好,您能解释一下您的答案比已经提供的答案更好吗?
Noel Widmer
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.