我在使用 Ninject 和 EntityFramework 的 ASP.NET MVC 3 应用程序时遇到了一个奇怪的问题。
我们有一个 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))