gpt4 book ai didi

c# - 在 application_endrequest 上配置对象上下文

转载 作者:太空狗 更新时间:2023-10-29 23:40:36 24 4
gpt4 key购买 nike

我遇到了存储在 HttpContext.Current.Items 中的 EF4 对象上下文的问题,然后希望在完全处理请求后立即处理。

在 Aplication_EndRequest 事件上,我调用 RepositoryContext 的 Terminate() 方法,它会从 HttpContext.Current.Items 集合中找到事件的 ObjectContext,然后调用 Close() 对其连接和 Dispose()

问题是有时我的某个页面会出现奇怪的行为。在某些情况下,我会收到一条错误消息:

The ObjectContext instance has been disposed and can no longer be used for operations that require a connection

我认为这可能会发生,因为不仅页面请求在完成后会调用 Application_EndRequest 事件,图像请求等也会调用,因此有时其他请求可能会在主页请求 ObjectContext 完成其工作之前处理它,但这不应该发生,因为所有内容都是在 HttpContext.Current.Items 集合上创建的,这当然不会在 HTTP 请求之间共享。

此外,根据研究,这可能是由于某些数据库请求的延迟加载引起的,但这里不应该是这种情况,因为我没有在代码的其他任何地方调用 Dispose(我已经检查过),因此 Dispose() on EndRequest 应该只在一切 完成时调用,不是吗?

关于可能导致此问题的任何想法?我怎样才能测试它?你有什么建议?

谢谢!

最佳答案

这意味着已经在 ObjectContext 上调用了 Dispose()。发生这种情况的原因有很多,但归结为在 Application_EndRequest 之前调用 Dispose() 的事实。没有所有的来源,就不可能确切地说出原因。

因为您是在寻求建议,所以我首先会从 HttpContext 中取出 ObjectContext。数据库连接应该只存在很短的时间,并执行特定的任务。如果它的生命周期很短,您可以将 ObjectContext 放在 using 语句中,它会自动为您调用 Dispose()。

关于c# - 在 application_endrequest 上配置对象上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10947928/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com