我有一个应用程序运行多个线程。线程不共享ObjectContext(每个线程都有自己的 - 我知道它们不是线程安全的)。实体框架事务与多个线程
然而,线程都共享事务下操作。原始线程创建一个TransactionScope并且它产生的每个线程使用主线程上的事务处理中的DependentTransaction创建一个TransactionScope。
当多个ObjectContext的请求在同一时间运行,我有时(不一致)出现错误:
System.Data.EntityException occurred
Message=An error occurred while closing the provider connection. See the inner exception for details.
InnerException: System.Transactions.TransactionException
Message=The operation is not valid for the state of the transaction.
Source=System.Transactions
StackTrace:
at System.Transactions.TransactionStatePSPEOperation.get_Status(InternalTransaction tx)
at System.Transactions.TransactionInformation.get_Status()
at System.Data.ProviderBase.DbConnectionInternal.CloseConnection(DbConnection owningObject, DbConnectionFactory connectionFactory)
at System.Data.SqlClient.SqlInternalConnection.CloseConnection(DbConnection owningObject, DbConnectionFactory connectionFactory)
at System.Data.SqlClient.SqlConnection.Close()
at System.Data.EntityClient.EntityConnection.StoreCloseHelper()
InnerException:
我只知道他们是在同一时间运行,因为当我在调试运行我的单元测试模式,并且这个异常会弹出,如果我查看正在运行的不同线程,我总会看到至少有一个其他线程在ObjectContext操作中停止。
而且,做一些阅读后,我尝试添加multipleactiveresultsets=False
我的连接字符串并没有什么区别。
这是实体框架中的错误吗?
您的答案基于您的链接不再工作。你能否提供更多关于根本原因的信息? – 2016-07-19 10:44:23
用于输入锁定的SyncRoot与离开时使用的SyncRoot不同。 – 2016-07-19 10:47:06