簡體   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