Я использую область транзакций для распределенных транзакций и внутренних транзакций NHibernate.
После всех операций я проверяю, не отменен ли Transaction.Current
, и пытаюсь зафиксировать транзакцию NHibernate.
Иногда я получаю эту ошибку:
Запрос COMMIT TRANSACTION не имеет соответствующей BEGIN TRANSACTION.
Транзакция, активная в этом сеансе, была подтверждена или прервана
другим сеансом.
Со следующей трассировкой стека:
System.Data.SqlClient.SqlConnection.OnError (исключение SqlException,
Boolean breakConnection) в
System.Data.SqlClient.SqlInternalConnection.OnError (SqlException
исключение, Boolean breakConnection) в
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning (TdsParserStateObject
stateObj) в System.Data.SqlClient.TdsParser.Run (RunBehavior
runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream,
BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject
stateObj) в
System.Data.SqlClient.TdsParser.TdsExecuteTransactionManagerRequest (байт []
буфер, запрос TransactionManagerRequestType, строковое имя транзакции,
TransactionManagerIsolationLevel isoLevel, время ожидания Int32,
Транзакция SqlInternalTransaction, TdsParserStateObject stateObj,
Boolean isDelegateControlRequest) в
System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransactionYukon (TransactionRequest
транзакционный запрос, строковое имя транзакции, IsolationLevel iso,
SqlInternalTransaction internalTransaction, Boolean
isDelegateControlRequest) в
System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransaction (TransactionRequest
actionRequest, Строковое имя, IsolationLevel iso,
SqlInternalTransaction internalTransaction, Boolean
isDelegateControlRequest) в
System.Data.SqlClient.SqlInternalTransaction.Commit () в
System.Data.SqlClient.SqlTransaction.Commit () в
NHibernate.Transaction.AdoTransaction.Commit ().
Основная проблема в том, что эта ошибка случайная. Что может быть причиной этого?