web-dev-qa-db-ja.com

エンティティフレームワーク-オブジェクトコンテキストはどこにありますか?

わかりました、非常に基本的なものが欠けています。 Entity Frameworkは初めてです。

インポートせずにストアドプロシージャを呼び出したいので、ExecuteStoreQuery()の使用を計画していました。ドキュメントによると、ExecuteStoreQueryはObjectContextのメソッドです。しかし、私は自分のObjectContextを取得する場所がわかりません。

データベースファーストを使用してエンティティを生成しました。これまでのところ、私は自分のエンティティに次のようなものにアクセスしています。

var db = new MyEntities();

PRODUCT p = db.PRODUCTS.First(a => a.PRODUCTSKEY == thekey);

しかし、dbがObjectContextではないため、db.ExecuteStoreQueryを呼び出すことはできません。

エンティティからObjectContextを取得する方法をグーグルで検索しました。私はいくつかの回答を見つけましたが、それらはすべて回避策であり、他に選択肢がない場合にのみ使用するように注意してフラグが付けられています。わかりました、それで正しい方法は何ですか?

ExecuteStoreQueryを使用するために私が見つけたすべての例は、すでにObjectContextがあることを前提としています。あまり役に立たなかった。

ObjectContextはEntity Frameworkによって「自動的に生成される」と述べたWebサイトを1つ見つけました。その場合、どこにあるのでしょうか。

ここには明らかに非常にシンプルなものがありません。これはそれほど難しいことではありません。

17
JoeMjr2

DbContextのObjectContextにアクセスするには、次の手順を実行するだけです。

var objectContext = ((IObjectContextAdapter)myDbContextObject).ObjectContext;
36
Corey Adler

Entity Framework 4.1では、ObjectContextDbContextに置き換えられました。実際、DbContextObjectContextのアダプタ(ラッパー)です。 ObjectContextを取得する必要がある場合は、DbContextインスタンスをIObjectContextAdapterインターフェースにキャストでき(明示的に実装されています)、ラップされたObjectContextインスタンスを使用できます。

ObjectContext context = ((IObjectContextAdapter)db).ObjectContext;

ところで私はあなたが探していると思います db.Database.SqlQuery メソッド。

12

あなたの場合、MyEntitiesはObjectContextです。

技術的には、ObjectContextクラスから継承するEntityFrameworkによって自動生成されるクラスです。

1
Sebastian K