asp.net-mvc-3 - 带有 Ninject 和 EntityFramework 的 ASP.NET MVC 3 中的 ChildAction

标签 asp.net-mvc-3 entity-framework ninject

我在使用 Ninject 和 EntityFramework 的 ASP.NET MVC 3 应用程序中遇到一个奇怪的问题。

我们有一个 ISession 接口(interface),它由 EntitySession 扩展,它实际上是 EntityFramework DbContext 的轻型包装器。

这是我的 Ninject 绑定(bind):

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.

我在我的 Controller 中注入(inject)了 ISession,它应该在请求结束时被释放。

在我看来,执行子操作不应该执行另一个请求,因此它应该使用与主操作相同的 dbcontext 实例。

我不知道其他人是否对这个堆栈有类似的问题。

我的 Razor 代码如下:

@Html.Action(MVC.Controller.Action(Model.Id))

最佳答案

我猜这可能是由于引用 MyEfDbContext 的对象之一具有比 MyEfDbContext 本身更长的生命周期。请检查依赖链并尝试确定您是否正在使用来自应用程序、 session 、单例范围中的对象的上下文。

如果找到它,只需将对 MyEfDbContext 的依赖替换为对 MyEfDbContext 工厂对象的依赖。

在这种情况下,您可以自己编写一个工厂类,或者您可以使用 Factory 扩展来动态创建工厂 (https://github.com/ninject/ninject.extensions.factory)。

希望对您有所帮助!

关于asp.net-mvc-3 - 带有 Ninject 和 EntityFramework 的 ASP.NET MVC 3 中的 ChildAction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12303648/

相关文章:

c# - 在 Controller 上下文可用之前查找请求是否为子操作请求

c# - 为什么 Request.Url.Authority 返回内部路径而不是我的域

asp.net-mvc-3 - 不支持使用相同的 DbCompiledModel 针对不同类型的数据库服务器创建上下文

sql-server-2008 - Entity Framework Database.SetInitializer根本不起作用

Javascript 在选中另一个复选框时取消选中一个复选框

c# - LINQ:数据范围内的最新数据总和

asp.net - 阻止 EF Core 构建具有前缀名称 IdentityDbContext 的表

entity-framework - 如何停止 Entity Framework 5 迁移添加 dbo。成键名?

c# - Ninject.Web 和用户控件

c# - 具有 Azure 辅助角色的 Ninject