106

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

编译会抛出以下错误:

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

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

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

有什么想法吗?谢谢!

4

8 回答 8

210

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

于 2009-08-13T22:49:22.427 回答
55

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

System.Data.Entity.Core.Objects.ObjectQuery
于 2014-02-18T21:27:53.920 回答
32

不久前从 EF5 升级到 EF6 nuget 并一直遇到此问题。我会通过将生成的代码更新为 reference 来临时修复它System.Data.Entity.Core.Objects,但是在生成之后它会再次变回(正如预期的那样,因为它生成了)。

这很好地解决了这个问题:

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

如果您有任何使用 EF 设计器创建的模型,则需要更新代码生成模板以生成 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,则需要选择Online选项卡并搜索EF 6.x EntityObject Generator
  3. 如果您对代码生成模板应用了任何自定义,则需要将它们重新应用到更新的模板。
于 2014-04-01T17:07:53.423 回答
4

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

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

于 2014-12-17T11:22:09.360 回答
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-系统数据.aspx

于 2014-01-08T18:26:40.820 回答
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。

于 2015-09-02T18:12:14.310 回答
0

我添加了对 .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

于 2011-08-07T19:08:39.907 回答
0

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

于 2017-06-01T13:26:18.793 回答