【发布时间】:2023-03-08 02:28:01
【问题描述】:
仅在生产中,我收到此错误:“执行命令需要打开且可用的连接。连接的当前状态为关闭。”奇怪的是它说它发生的地方。它发生在我们所有的开发、测试或 UAT 会话中从未发生过的地方......这是底层流程。
我们使用 MVP 模式。这并不那么重要,但基本上流程如下:
- Presenter 实例化一个关联的存储库并调用一个方法来查询相应的数据,并将其传递给模型。此时查询仍然针对数据库进行(未迭代或调用 ToList)。
- View 将此数据绑定到下拉控件。在这里,当它迭代创建项目列表时,就会发生错误。
此时我们绑定了大约 8 个下拉菜单。同样,我在其他任何时候都没有经历过这种情况——这也不够一致。有什么想法吗?
谢谢。
【问题讨论】:
-
您是否通过使用
using块或调用Dispose()正确处理您的上下文? -
您是否正在针对生产数据库进行 UAT?如果不是,暂存数据库与生产数据库完全一样吗?如果没有,您可能会遇到生产限制连接或超时问题。或者,您尝试使用同一连接运行多个查询。在这种情况下,启用 MARS。
-
暂存设置与 PROD 相同,但环境略有不同。 MARS 已启用。 ObjectContext 通过将其存储在 HttpContext.Current.Items 集合中而保留在单个实例中,该集合存储用于单个 HTTP 请求。我无法准确重现 - 我只是多次访问同一个页面,它工作正常......
-
可能是连接池问题?
-
@DustinDavis:不,它将在某个时间收集,就像在任何其他应用程序中一样。 垃圾收集与
IDisposable对象的处置(或替代)不同。
标签: .net asp.net sql-server entity-framework entity-framework-4