执行该命令需要一个开放且可用的连接.连接的当前状态被破坏.

Ela*_*nda 6 c# sql asp.net entity-framework

在qa中使用一段时间后,我们得到以下错误

Execution of the command requires an open and available connection. The connection's current state is broken.

我们正在使用EntityFramework的单例实例

SOF建议:

服务器关闭导致的invalidoperationexception的EF恢复

1)偶尔创建一个新的ContectObject实例

2)配置池连接数更高

解决这个问题的最佳做法是什么?

我认为为每个Dal操作创建一个新的contectObject是浪费的

Jon*_*eet 11

我认为为每个Dal操作创建一个新的contectObject是浪费的

你有这方面的证据吗?我相信,实体框架和最确实的数据访问框架被设计为大量的短期和独立的上下文.在这里实现自己的池/缓存通常是一种反模式,可能导致过时的结果,并发问题和糟糕的故障恢复(这里就是这种情况).

您认为哪些具体资源会被浪费,您是否通过实验验证了这一点?

基本上,我建议为每个工作单元创建一个新的上下文(可能大致对应于一个请求) - 测量任何性能差异,并查看问题是否消失(正如我预期的那样).作为测试的一部分,偶尔会断开数据库服务器与网络的连接以检查您是否可以实际恢复...

  • 你*想*,或者你有经验证据?不要忘记已经在应用层下面有连接池*.对于对象:不要忘记,就GC而言,短寿命对象实际上比长寿命对象更便宜. (4认同)