我有一個應用程序運行多個線程。線程不共享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