Ninject と EntityFramework を使用する ASP.NET MVC 3 アプリケーションで奇妙な問題が発生しています。
実際には EntityFramework DbContext の軽いラッパーである EntitySession によって拡張される ISession インターフェイスがあります。
これが私のNinjectバインディングです:
Kernel.Bind<MyEfDbContext>().To<MyEfDbContext>().InRequestScope();
Kernel.Bind<ISession>().To<EntitySession>().InRequestScope();
ご覧のとおり、すべてが Request スコープにあります。
問題は、ChildAction を実行すると、最初にページにアクセスしたときに正常に動作しますが、ページを更新すると常にこの例外が発生し、IIS を再構築またはリセットして取り除く必要があることです。
The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.
コントローラーに ISession を挿入します。これは、要求の最後に破棄する必要があります。
私の考えでは、子アクションを実行しても別のリクエストを行うべきではないため、マスター アクションと同じ dbcontext のインスタンスを使用する必要があります。
他の誰かがこのスタックで同様の問題を抱えていたかどうかはわかりません。
私のかみそりのコードは次のようになります。
@Html.Action(MVC.Controller.Action(Model.Id))