首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何查找导致EntityCommandExecutionException出现的原因

问如何查找导致EntityCommandExecutionException出现的原因
EN

Stack Overflow用户
提问于 2013-12-30 11:16:14
回答 3查看 5.3K关注 0票数 1

我正在使用实体框架(DevArt的数据提供者)处理mysql数据库。我注意到,有时在日志中我会遇到这样的异常:

System.Data.EntityCommandExecutionException:执行命令定义时发生错误。有关详细信息,请参阅内部异常。 -> Devart.Data.MySql.MySqlException:在查询期间失去了与MySQL服务器的连接 -> System.TimeoutException:服务器没有在指定的超时间隔内响应。 -> System.IO.IOException:无法从传输连接读取数据:连接尝试失败是因为连接方在一段时间后没有正确响应,或者已建立的连接失败是因为连接主机没有响应。

这个例外是同时发生的几次(?)一次丢弃几个连接)事情发生后-一切正常运转一段时间。我试过了

我知道这个错误可能太普遍了,但是需要一个建议来避免这个错误?尝试在池和Validate Connection=true;中增加连接--没有结果。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-02 14:38:21

“查询期间丢失到MySQL服务器的连接”错误的可能原因:

  1. MySQL服务器关闭了连接:

代码语言:javascript
复制
- look for any errors in the logs of MySQL server
- check the value of wait\_timeout variable at your MySQL server

​

  1. 网络问题
  2. 这个问题是针对dotConnect for MySQL的:在连接字符串中设置“issue Connection=true;”选项,用于每次从池检索连接时验证连接(性能较差,应该在连接不稳定的环境中使用)。如果“验证Connection=false;”(默认)-连接仅在池中每~30秒验证一次(不检查,不从池中检索)

如果要显式地向您的DbContext (或ObjectContext)对象提供普通的ObjectContext连接,请考虑以下几点:

  1. MySqlConnection对象不是线程安全的。您应该避免同时在多个线程中使用相同的MySqlConnection。
  2. 您可以在应用程序中实现故障转移逻辑:

代码语言:javascript
复制
- [http://www.devart.com/dotconnect/mysql/docs/?Devart.Data.MySql~Devart.Data.MySql.MySqlConnection~ConnectionLost\_EV.html](http://www.devart.com/dotconnect/mysql/docs/?Devart.Data.MySql~Devart.Data.MySql.MySqlConnection~ConnectionLost_EV.html)
- [http://www.devart.com/dotconnect/mysql/docs/?Devart.Data~Devart.Common.ConnectionLostCause.html](http://www.devart.com/dotconnect/mysql/docs/?Devart.Data~Devart.Common.ConnectionLostCause.html)
- [http://www.devart.com/dotconnect/mysql/docs/?Devart.Data~Devart.Common.ConnectionLostContext.html](http://www.devart.com/dotconnect/mysql/docs/?Devart.Data~Devart.Common.ConnectionLostContext.html)

​

票数 2
EN

Stack Overflow用户

发布于 2013-12-30 13:31:35

在这种情况下,对mysql 2013年9月版本的更新(2013年8月安装)和禁用连接池似乎起到了帮助作用。将等待1天,然后启用池。如果这也有效-比这是“版本的”错误,在其他情况下-禁用连接池有帮助。

票数 0
EN

Stack Overflow用户

发布于 2019-07-17 23:09:04

这也发生在我身上,但对我没有什么作用,我想我不会掉进上面的用例。Devart获得了默认的命令超时,这似乎是在默认超时(30秒)之后停止执行。

Devart建议在连接字符串(;Default Command Timeout=6000;)中设置这个值,但是连接字符串‘默认命令超时’的值似乎没有兑现,所以最后我在代码中更新了命令超时值,如下所示,解决了我的问题。

代码语言:javascript
复制
            using (var model = new MyEntities())
            {
                System.Data.Entity.DbContext dbContext = model as System.Data.Entity.DbContext;
                dbContext.Database.CommandTimeout = 6000;
                model.CallProcedure1(idProcess);
                model.CallProcedure2(idProcess);
            }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20838401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档