Функция объема транзакции - PullRequest
1 голос
/ 26 октября 2011

Я использую приведенный ниже код для применения объема транзакции

TransactionOptions transOption = new TransactionOptions();
transOption.IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted;

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, transOption))
{
  //Code to delete    
  //Code to insert

  scope.Complete();
}

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

Ответы [ 2 ]

1 голос
/ 26 октября 2011

Вы должны сообщить нам, какой сервер базы данных вы используете.и если вы получаете какие-либо сообщения об исключениях или нет

, в любом случае код кажется правильным, вы проверяли (MSDTC)?проверьте, включен ли он в вашей ОС.

0 голосов
/ 27 октября 2011

http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.complete.aspx состояния:

TransactionScope.Complete () Указывает, что все операции в области успешно завершены.

Таким образом, если ваш «Код для вставки» не генерирует исключение, которое завершает блок «Использование», ваш код всегда вызывает scope.Complete () и фиксирует изменения вашей базы данных.

Если ваши «Код для удаления» и «Код для вставки» обрабатывают исключения внутренне, то они должны возвращать информацию в блок «Использование», чтобы указать, сработало ли что-либо. Например, предполагая, что ваши блоки «кода» являются вызовами методов, которые возвращают true, если все хорошо, или false, если не удалось, вы можете написать:

bool allGood;

allGood = CodeToDelete();

if(allGood)
{
  allGood = CodeToInsert();
}

if(allGood)
{
  scope.Complete();
}
...