После получения транзакции фиксации NHibernate «У запроса COMMIT TRANSACTION нет соответствующей BEGIN TRANSACTION. ' - PullRequest
0 голосов
/ 18 марта 2011

Я использую область транзакций для распределенных транзакций и внутренних транзакций 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 ().

Основная проблема в том, что эта ошибка случайная. Что может быть причиной этого?

1 Ответ

0 голосов
/ 19 марта 2011

похоже, что вы не открываете сеансы через централизованный код, а закрываете сеансовую транзакцию каждый раз, иначе я не вижу причины для этого ..

убедитесь, что у вас тот же путь кода, которыйиспользуется в месте, где выдается эта ошибка .. возможно, просматривая трассировку стека.

...