Sag*_*gi 5 c# asp.net entity-framework
我遇到了EF4对象上下文的问题,我将其存储在HttpContext.Current.Items中,然后在完全处理请求后立即处理.
在Aplication_EndRequest事件中,我调用RepositoryContext的Terminate()方法,该方法将从HttpContext.Current.Items集合中找到活动的ObjectContext,并在其连接上调用Close()并在其上调用Dispose().
问题是,有时候我的某个页面会出现奇怪的行为.在某些情况下,我得到一个错误说:
ObjectContext实例已被释放,不能再用于需要连接的操作
我想也许这可能发生,因为不仅页面请求一旦完成就会调用Application_EndRequest事件,而且还会调用图像请求等等,因此有时其他请求可能会在完成其工作之前处理主页面请求ObjectContext,但这应该是因为一切都是在集合HttpContext.Current.Items上进行的,所以当然不能在HTTP请求之间共享.
此外,从研究可能是由于一些数据库请求的延迟加载引起的,但这不应该是这里的情况,因为我没有在代码上的其他任何地方调用Dispose(我已经检查过),因此EndRequest上的Dispose()应该只有在一切都结束时才会被召唤,不应该吗?
关于可能导致这种情况的任何想法?我该怎么测试呢?你会建议什么?
谢谢!
小智 1
这意味着已经在 ObjectContext 上调用了 Dispose()。发生这种情况的原因有很多,但归根结底是有东西在 Application_EndRequest 之前调用了 Dispose()。如果没有所有来源,就不可能准确说出原因。
因为您正在寻求建议,所以我的第一个方法是从 HttpContext 中取出 ObjectContext。数据库连接应该只存在很短的时间,并执行特定的任务。如果它的生命周期很短,您可以将 ObjectContext 放在 using 语句中,该语句将自动为您调用 Dispose()。
| 归档时间: |
|
| 查看次数: |
1600 次 |
| 最近记录: |