5

EF6 で、カスタム オブジェクト インスタンス クリエーターを挿入する方法はありますか? 私がする必要があるのは、マトリライゼーションが発生する前にエンティティのインスタンスを EF に提供することです。

基本的に、POCOエンティティをパラメーターなしのコンストラクターで定義できるようにしたいので、DI集計を使用できるようになり、最終的にはEFで永続化されます。

ObjectMaterialized イベントを使用して、同様のことを実現できることがわかりました。

var oc = ( this as IObjectContextAdapter ).ObjectContext;
oc.ObjectMaterialized += ( s, e ) => 
{
   //resolve and inject dependencies here using e.g. public properties  
};

しかし、コンストラクターで依存関係を宣言したいと本当に思っています。

何か案が?乾杯、.m

4

1 に答える 1

4

デフォルトの ObjectContext を使用すると、EF コードを見ても、これが可能であるとは思えません。最終的に、オブジェクトは によって作成されObjectContext.CreateObjectます。これは次の 2 つのいずれかを行います。デフォルト コンストラクターを呼び出すか、プロキシの作成が有効になっている場合は、関連するプロキシ タイプを作成します。プロキシ タイプは、拡張された変更追跡とプロパティの遅延読み込みに使用されます。

ただし、これObjectContext.CreateObjectは仮想であるため、派生クラスでオーバーライドできます。その派生クラスには、コンテナー (または有効期間スコープ) への参照が提供され、オーバーライドされたCreateObject呼び出しで、これがエンティティの解決に使用されます。

ObjectContext次に問題になるのは、派生型をに使用するものとしてどのように指定するのDbContextかということです。まあ、使用すべきのインスタンスを取るコンストラクタがあります。ObjectContextDbContext

これは、接続文字列で使用しているモデルについてObjectContextそれ自体を伝える必要があるため、私のアイデアが少し軌道から外れ始めるところです。これは、モデルが遅延して作成され、構築される前に利用できないため、コードファーストのアプローチが機能しないことを意味する可能性があると思いますDbContext。ただし、モデルファーストのアプローチの場合、これでうまくいくのでしょうか?

于 2014-05-10T20:01:17.527 に答える