Как откатить 3 утверждения, если одно не получается? - PullRequest
2 голосов
/ 19 августа 2011

В C # у меня есть три оператора в методе, которые вставляют данные в базу данных. Первое утверждение вставляется, и я получаю идентификатор из него. Этот идентификатор используется в следующих двух утверждениях.

У меня есть два случая:

1.) Второй оператор может возвращать false, если определенные условия ввода не выполнены. В этом случае я бы хотел откатить первое утверждение.
2.) Если какое-либо из операторов выдает ошибку, все они должны выполнить откат.

Я подумал обернуть все три оператора в область транзакции, но он будет выполнять откат только для исключений, которые охватывают только второй случай. Как лучше всего обращаться с обоими случаями?

Я использую DataContext через DBML с LINQ 2 SQL

Ответы [ 3 ]

5 голосов
/ 19 августа 2011

С TransactionScope () вам нужно вызвать метод Complete (), чтобы зафиксировать изменения.В противном случае все ожидающие изменения будут отменены, поэтому ваш (1) также покрывается

1 голос
/ 19 августа 2011

Посмотрите на ссылку, которую я разместил.Довольно просто откатить транзакцию вручную

Как зафиксировать и откатить транзакцию в .NET

Суть в том, что после того, как у вас есть объект транзакции, выможно вызвать RollBack().

Для Linq-To-Sql взгляните на Практическое руководство. Скобка отправки данных с использованием транзакций (LINQ to SQL)

0 голосов
/ 19 августа 2011

Вы можете использовать оператор RAISERROR с правильным уровнем серьезности (я полагаю, что это следует сделать 18), чтобы «вызвать исключение» и вызвать откат транзакции в условиях, проверенных пользователем.

Очевидно, что это только откатит что-либо в пределах той же области транзакции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...