17

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

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

Database First を使用してエンティティを生成しました。これまでのところ、私は自分のエンティティに次のようにアクセスしてきました:

var db = new MyEntities();

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

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

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

私が見つけた ExecuteStoreQuery の使用例はすべて、ObjectContext が既にあることを前提としています。あまり役に立ちません。

ObjectContext が Entity Framework によって「自動的に生成される」と述べている 1 つの Web サイトを見つけました。もしそうなら、それはどこですか?

ここでは明らかに非常に単純なものが欠けています。これはそれほど難しいことではありません。

4

3 に答える 3

36

DbContextのObjectContextに到達するには、次のことを行う必要があります。

var objectContext = ((IObjectContextAdapter)myDbContextObject).ObjectContext;
于 2013-01-09T19:49:39.170 に答える
13

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

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

ところで、あなたは方法を探していると思いますdb.Database.SqlQuery

于 2013-01-09T20:00:16.370 に答える
1

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

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

于 2013-01-09T19:46:08.687 に答える