0

我使用ObjectContext并将其存储在HttpContext.Current.Items集合中。我共享单个请求的ObjectContext,但该框架还支持通过打开一个标志来加载全新的,非缓存的ObjectContext的独特副本。这样,对于某些场景,我可以完全绕过HTTPContext。这是有正当理由的;一个是我有各种使用ObjectContext的静态引用,所以这些静态每个静态都获得他们自己的副本。其他情况是,某个特定流程可能会以孤立的方式运行,因此它需要具有独特性。ObjectContext和每个请求缓存 - 获取ObjectDisposedException

我想在页面卸载中处理共享的ObjectContext,并且偶尔可以正常工作,但是偶尔会发生ObjectDisposedException异常(因为某些进程尝试读取数据并调用它) 。我的意思是说我一次会得到这个异常,调用回发,并且也获取该请求的错误,以及下一个请求。关闭并重新打开浏览器,但之后偶尔会出现错误。它是随机的;有一次这个页面可以工作,但后来它没有。它是一样的页面,所以它不是逻辑上的错误。

这使我相信:

  • 的HttpContext.Current.Items集合不是孤立的一个HttpRequest的每个用户,OR:
  • 静力学在某种程度上影响过程和共享的处置连接或:
  • 还有就是我需要不断研究的一个错误....

任何人都经历的问题与第2项?我的理解错了吗?

回答

0

前两项都不应该发生。每个HTTP请求处理肯定使用HttpContext,如果静态不访问HttpContext,它们不应该影响你的上下文。

这种随机行为还有其他原因。确保您不会在请求之间(通过会话或缓存)共享代理/连接的实体,或者在处理来自静态的上下文之后使用它们。

默认情况下,所有POCO实体都被代理,并且它们在内部保持对上下文的引用。上下文的引用是动态变更跟踪和延迟加载所必需的。因此,如果您在处理上下文之前没有手动分离实体,则它将继续引用已处理的实体,并且第一次数据修改或对缓存实体上未加载的导航属性的访问将引发此异常。基于EntityObject的实体也会这样做。