繁体   English   中英

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

[英]The type or namespace name 'Objects' does not exist in the namespace 'System.Data'

我正在使用实体 C# 和 SQL 服务器来创建 n 层应用程序。 我正在为我的所有 DAL 组件创建一些通用的基类。 在这个基础 class 中,我想处理由实体 ZA8CFDE6331149EB2AC966F9 继承的 ObjectContext 基础 class 的连接 state

编译会抛出以下错误:

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

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

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

有什么想法吗? 谢谢!

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

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

System.Data.Entity.Core.Objects.ObjectQuery

从EF5升级到EF6 nuget一段时间后仍然遇到这个问题。 我会通过更新生成的代码来引用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. 添加适当的EF 6.x代码生成模板。 在EF Designer中打开模型,右键单击设计图面并选择Add Code Generation Item ...
    • 如果您使用的是DbContext API(推荐),那么EF 6.x DbContext Generator将在Data选项卡下可用。
      注意: 如果您使用的是Visual Studio 2012,则需要安装EF 6 Tools才能使用此模板。 有关详细信息,请参阅Get Entity Framework
    • 如果您使用的是ObjectContext API,则需要选择Online选项卡并搜索EF 6.x EntityObject Generator
  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

在我的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。

如果你想使用“System.Data.Objects.EntityFunctions”

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

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

我添加了对.dll文件的引用,对于System.Data.Linq,上面的内容还不够。 您可以在以下版本的各个目录中找到.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

对于 EF6,将“xxxx.Context.cs”替换为这些使用

using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Data.Entity.Core.Objects;
using System.Linq;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM