わかりました、非常に基本的なものが欠けています。 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つ見つけました。その場合、どこにあるのでしょうか。
ここには明らかに非常にシンプルなものがありません。これはそれほど難しいことではありません。
DbContextのObjectContextにアクセスするには、次の手順を実行するだけです。
var objectContext = ((IObjectContextAdapter)myDbContextObject).ObjectContext;
Entity Framework 4.1では、ObjectContext
はDbContext
に置き換えられました。実際、DbContext
はObjectContext
のアダプタ(ラッパー)です。 ObjectContext
を取得する必要がある場合は、DbContext
インスタンスをIObjectContextAdapter
インターフェースにキャストでき(明示的に実装されています)、ラップされたObjectContext
インスタンスを使用できます。
ObjectContext context = ((IObjectContextAdapter)db).ObjectContext;
ところで私はあなたが探していると思います db.Database.SqlQuery
メソッド。
あなたの場合、MyEntitiesはObjectContextです。
技術的には、ObjectContextクラスから継承するEntityFrameworkによって自動生成されるクラスです。