この質問は、次の SO 投稿でかなりエレガントに回答されています。
StructureMap CacheBy InstanceScope.HttpSession が機能しない
基本的に、魔法は次のコードから来ています(あなたの質問と の新しい構文に適応していますStructureMap
):
ObjectFactory.Initialize(factory => {
factory.For<MyContext>()
.CacheBy(InstanceScope.HttpSession)
.Use(new MyContext(_myConnectionString));
});
次に、コントローラーで、次を使用してオブジェクトのインスタンスを作成するだけです。
var db = ObjectFactory.GetInstance<MyContext>();
IoC (制御の反転) セットアップによってStructureMap
、インスタンスのスコープが に設定さHttpSession
れているため、セッションが同じである限り、毎回同じコンテキストを取得する必要があります。
ただしDbContext
、特にオブジェクトの場合、これは通常非常に悪い考えであることに注意してください。状態追跡オブジェクトをステートレス環境と混在させているため、不正なトランザクションまたはオブジェクトが無効な状態になる可能性があります。奇妙な状態にあると、セッションを更新するまで、それ以上のデータベース呼び出しを実行できなくなる可能性があります。
DbContext
オブジェクトは通常、非常に軽量で使い捨てになるように設計されています。それらをスコープから外して、基本的には使い終わったらすぐに死ぬのはまったく問題ありません。