我正在使用实体框架(DevArt的数据提供程序)处理mysql数据库。我注意到在日志中有时会出现这样的异常:
System.Data.EntityCommandExecutionException:在
执行命令定义。有关详细信息,请参见内部异常。
--->Devart.Data.MySql.MySqlException:查询期间与MySql服务器的连接断开
--->System.TimeoutException:服务器未响应
在指定的超时间隔内。
--->System.IO.IOException:无法从传输连接读取数据:连接
尝试失败,因为关联方没有正确响应
一段时间后,或建立的连接失败,因为
连接的主机无法响应。
--->System.Net.Sockets.SocketException:连接尝试失败
因为关联方在
时间,或建立的连接失败,因为连接的主机
未能响应
这个异常同时发生了好几次?一次断开几个连接…)然后在它发生之后-在一段时间内一切正常。我试过了
我知道这个错误可能太普遍了,但是需要一个建议来避免这个错误?..
尝试在池中增加连接,但没有成功。
最佳答案
“查询期间与MySQL服务器的连接断开”错误的可能原因:
MySQL服务器已关闭连接:
在MySQL服务器的日志中查找任何错误
检查MySQL服务器上wait_timeout变量的值
网络问题
此问题特定于MySQL的dotConnect:在连接字符串中设置“Validate Connection=true;”选项,以便每次从池中检索连接时都对其进行验证(在连接不稳定的环境中,应使用更低的性能)。如果“Validate Connection=false;”(默认值)-连接仅在池中每隔~30秒验证一次(不检查不从池中检索)
如果要显式地提供到DbContext(或ObjectContext)对象的纯ADO.NET连接,请考虑以下几点:
MySqlConnection对象不是线程安全的。您应该避免在多个线程中同时使用同一个MySqlConnection
您可以在应用程序中实现故障转移逻辑:
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.ConnectionLostContext.html