web-dev-qa-db-ja.com

タイプまたはネームスペース名「Objects」はネームスペース「System.Data」に存在しません

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

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

型または名前空間名「オブジェクト」が名前空間「System.Data」に存在しません(アセンブリ参照がありませんか?)

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

アセンブリを参照として追加しようとしましたが、アセンブリ参照の[.NET]タブで見つけることができませんでした。

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

97
pencilslate

.NET Assembly System.Data.Entity.dllへの参照を追加する必要があります。

198
Joshua Belden

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

System.Data.Entity.Core.Objects.ObjectQuery
50
James

しばらく前にEF5からEF6 nugetにアップグレードすると、この問題が引き続き発生しました。生成されたコードを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 それらを削除するキー。
    注:Webサイトプロジェクトではテンプレートedmxファイルの下にネストされませんが、ソリューションエクスプローラーに一緒にリストされます。
    注:VB.NETプロジェクトでは、ネストされたテンプレートファイルを表示するには、[すべてのファイルを表示]を有効にする必要があります。
  2. 適切なEF 6.xコード生成テンプレートを追加します。 EF Designerでモデルを開き、デザインサーフェイスを右クリックして、Add Code Generation Item ...を選択します。
    • DbContext APIを使用している場合(推奨)、EF 6.x DbContext GeneratorData タブ。
      注:Visual Studioを使用している場合2012年には、このテンプレートを使用するにはEF 6ツールをインストールする必要があります。詳細については、 Get Entity Framework を参照してください。
    • ObjectContext APIを使用している場合は、Onlineタブを選択し、EF 6.xを検索する必要があります。 EntityObject Generator
  3. コード生成テンプレートにカスタマイズを適用した場合、更新されたテンプレートにカスタマイズを再適用する必要があります。
31
Tim Valentine

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。

3
user8128167

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

3
Caesar

「System.Data.Objects.EntityFunctions」を使用する場合

eF 6.1+で「System.Data.Entity.DbFunctions」を使用する

2
sumanth

.NET Assembly System.Data.Linqへの参照を追加する必要があります

0
Null29

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)\ Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\Profile\Client\System.Data.Linq.dll 4.0.0.0

0
Tom Cubbins