У меня есть приложение с несколькими потоками.Потоки НЕ разделяют ObjectContext (каждый поток имеет свой собственный - я знаю, что они не являются потокобезопасными).
Однако все потоки работают в общей транзакции.Исходный поток создает TransactionScope, а каждый поток, который он порождает, создает TransactionScope, используя DependentTransaction из транзакции в основном потоке.
Когда несколько запросов 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
в строку подключения, и это не имело никакого значения.
Это ошибкав Entity Framework?