106

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

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

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

また、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 にアップグレードし、この問題が発生し続けました。生成されたコードを参照に更新することで一時的に修正しますSystem.Data.Entity.Core.Objectsが、生成後は元に戻されます(生成されてから予想どおり)。

これにより、問題が完全に解決されました。

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

EF デザイナーで作成されたモデルがある場合は、コード生成テンプレートを更新して 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 デザイナーでモデルを開き、デザイン サーフェイスを右クリックして [コード生成項目の追加... ] を選択します。
    • DbContext API を使用している場合 (推奨)、EF 6.x DbContext Generatorは [データ] タブで使用できます。
      注: Visual Studio 2012 を使用している場合、このテンプレートを使用するには EF 6 ツールをインストールする必要があります。詳細については、エンティティ フレームワークの取得を参照してください。
    • ObjectContext API を使用している場合は、[オンライン] タブを選択し、 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- SystemData.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

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

于 2011-08-07T19:08:39.907 に答える