实体框架核心中的连接超时问题

时间:2019-02-20 16:48:15

标签: c# entity-framework-core

我有一个多线程应用程序,需要从同一位置的同一表中插入大量记录。连续运行2小时后,我的应用程序遇到了连接超时问题。

堆栈跟踪

  

System.Data.SqlClient.SqlException(0x80131904):超时已过期。   在操作完成之前超时   服务器没有响应

     

System.ComponentModel.Win32Exception(258):等待操作超时

     

在System.Data.SqlClient.SqlConnection.OnError(SqlException异常,   布尔值breakConnection,动作为1 wrapCloseInAction),位于   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject   stateObj,布尔值调用者HasConnectionLock,布尔值asyncClose)   System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior,   SqlCommand cmdHandler,SqlDataReader dataStream,   BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject   stateObj,Boolean&dataReady)   System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()在   System.Data.SqlClient.SqlDataReader.get_MetaData()

我怀疑这可能是特定表中死锁的原因。我在SQL Server中验证了该表处于死锁状态。

我尝试了以下解决方案

  1. using (var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.ReadUncommitted }))
  2. 我也尝试了SERIALIZABLE和SNAPSHOT隔离级别

运行多线程应用程序时,它显示“ MSDTC Server on unavailable”。

注意:我启动了分布式事务处理协调器服务,但仍然让您的环境不支持分布式事务处理

我尝试使用SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED,但连续运行2小时后仍然遇到相同的问题

我在C#代码的SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTEDBeginTransaction之间添加了Commit transaction,但是没有运气。

请问有人可以帮助我克服这个困难吗?

此外,我想这可能是导致我们的应用程序与SQL Server数据库之间打开多个连接的原因。仅供参考。我仅在using语句中添加了查询,但连接仍未关闭。我怎么说这意味着来自SQL Server的sysprocess的连接数量显示了许多打开的连接

0 个答案:

没有答案