我遇到了存储在HttpContext.Current.Items中的 EF4 对象上下文的问题,然后希望在完全处理请求后立即处理。
在 Aplication_EndRequest 事件中,我调用 RepositoryContext 的 Terminate() 方法,该方法将从HttpContext.Current.Items集合中找到活动的ObjectContext ,并在其连接上调用Close()并在其上调用Dispose()。
问题是有时我会在我的一个页面上出现奇怪的行为。在某些情况下,我收到一条错误消息:
ObjectContext 实例已被释放,不能再用于需要连接的操作
我认为这可能会发生,因为不仅页面请求一旦完成就会调用 Application_EndRequest 事件,还会调用图像请求等,因此有时其他请求可能会在主页请求 ObjectContext 完成其工作之前对其进行处理,但这应该不会发生,因为一切都是在集合HttpContext.Current.Items上进行的,这当然不是在 HTTP 请求之间共享的。
另外,从研究来看,这可能是由于某些数据库请求的延迟加载引起的,但这里不应该是这种情况,因为我没有在代码的其他任何地方调用 Dispose(我已经检查过),因此 EndRequest 上的 Dispose() 应该只有当一切都完成时才被调用,不是吗?
关于可能导致这种情况的任何想法?我该如何测试它?你有什么建议?
谢谢!