【问题标题】:Entity Framework Data Reader Production Error实体框架数据读取器生产错误
【发布时间】: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


【解决方案1】:

我怀疑由于上下文未正确处理(正如@Adam 所述),您的连接池已被最大化。增加您的池设置(或减少超时)以进行测试,但您需要正确处理上下文(归功于@Adam)。

您可以使用性能计数器http://msdn.microsoft.com/en-US/library/ms254503(v=VS.80).aspx对此进行测试

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 2015-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多