2012-09-06 30 views
2

我對使用Ninject和EntityFramework的ASP.NET MVC 3應用程序有一個奇怪的問題。在ASP.NET MVC 3中使用Ninject和EntityFramework的ChildAction

我們有一個ISession接口,該接口由EntitySession擴展,實際上它是EntityFramework DbContext的輕包裝。

這裏是我的Ninject綁定:

Kernel.Bind<MyEfDbContext>().To<MyEfDbContext>().InRequestScope(); 
Kernel.Bind<ISession>().To<EntitySession>().InRequestScope(); 

正如你所看到的,一切都在要求範圍之內。

問題是,當我執行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)) 
+0

你使用哪個版本的ninject? – mipe34

回答

0

我想這可能會產生引用MyEfDbContext有MyEfDbContext本身更長的生命週期對象因之一。請檢查依賴關係鏈並嘗試確定您是否正在使用應用程序,會話,單例作用域中的對象的上下文。

如果找到它,只需替換對MyEfDbContext Factory對象的依賴關係MyEfDbContext的依賴項。

在這種情況下,您可以自己編寫一個工廠類,或者您可以使用工廠擴展,它將動態創建工廠(https://github.com/ninject/ninject.extensions.factory)。

希望有幫助!

相關問題