2017-03-23 20 views
1

Entity Frameworkクラスでイベントをワイヤリングする必要があります。これを行うには、DBContextからこれらのクラスの取得を「インターセプト」する必要があります。Entity FrameworkでDataContextオブジェクトの作成を傍受してイベントを呼び出す

リポジトリレベルでこれを実行しようとしましたが、エンティティを渡してイベントリスナーを追加する前に、誰かがDBSetからオブジェクトを取得したときにこれを試みました。

しかし、レイジーローディングでは、ここではスパナがスローされます。

IDbCommandInterceptorを使用してクエリをインターセプトする方法が見つかったか、エンティティフレームワークオブジェクトの作成自体を傍受する方法があるか、または遅延ロードだけなので、依存関係を挿入するか、イベントを登録できますか?

+0

ああを見つけるには、「ObjectMaterialized」イベントで何かを発見したことがあります。 – Joe

答えて

1

DbContextの中には、ObjectContext.ObjectMaterializedイベントに登録することができます。あなたはそれを簡単にするためにコンストラクタで購読することができます。

((IObjectContextAdapter)this).ObjectContext.ObjectMaterialized += onObjectMaterialized; 

署名は、比較的単純な

void onObjectMaterialized(object sender, ObjectMaterializedEventArgs e) { 
    // your code here 
} 

され、オブジェクトはEF DbContextによって作成されたときに、今のコードを知っています。

+1

インターセプタとObjectProxiesを探してグーグルで過ごした後、みんなが答えたようにちょうどうんざりしました!ありがとう。正確に私が必要なもの。 – Joe

+0

@Joe - それはあなたのためにうれしい! – Igor

関連する問題