タイプまたは名前空間名「Objects」は名前空間「System.Data」に存在しません


101

エンティティ、C#、およびSQL Serverを使用して、n層アプリを作成しています。すべてのDALコンポーネントに共通の基本クラスをいくつか作成しています。この基本クラスでは、エンティティオブジェクトによって継承されたObjectContext基本クラスの接続状態を処理します。

コンパイルすると、次のエラーがスローされます。

タイプまたは名前空間名「Objects」が名前空間「System.Data」に存在しません(アセンブリ参照がありませんか?)

また、usingステートメントSystem.Data.Objectsも同じ理由で解決されません。

アセンブリを参照として追加しようとしましたが、アセンブリ参照の[.NET]タブにそれが見つかりませんでした。

何かご意見は?ありがとう!

回答:


207

.NETアセンブリSystem.Data.Entity.dllへの参照を追加する必要があります。


1
出来た!System.Data.objects名前空間が実際にSystem.Data.Entity内に存在する場合、興味がありますか?
鉛筆版2009

52

Entity Framework 6を​​使用している場合、名前空間が変更されました。使いたい

System.Data.Entity.Core.Objects.ObjectQuery

Entity Framework 6.1.3をnugetパッケージマネージャーからインストールしました。まだMicrosoftのアセンブリSystem.Data.Entityを参照していません。エラーが出ます。だから私の質問は、それを使用するステートメントを追加する前に、最初にSystem.Data.Entityを参照する必要があるということですか?
vibs2006

31

EF5からEF6 nugetにしばらく前にアップグレードし、この問題が発生し続けました。生成されたコードをreferenceに更新することで一時的に修正します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キーを押して削除できます。
    注: Webサイトプロジェクトでは、テンプレートはedmxファイルの下にネストされることはありませんが、ソリューションエクスプローラーではテンプレートと一緒にリストされます。
    注: VB.NETプロジェクトでは、「すべてのファイルを表示」を有効にして、ネストされたテンプレートファイルを表示できるようにする必要があります。
  2. 適切な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を検索する必要があります。
  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

.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


2
これを修正すると、次の質問に回答します。タイプまたは名前空間名「Linq」が名前空間「System.Data」に存在しない
Tom Cubbins

0

.NETアセンブリSystem.Data.Linqへの参照を追加する必要があります


こんにちはNull29、あなたの答えがすでに提供されているものよりどのように優れているか説明できますか?
Noel Widmer 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.