Здравствуйте, есть ли способ проверить, была ли транзакция с транзакцией TransactionScope выполнена или отката?TransactionScope проверяет, была ли транзакция выполнена ok
ответ
Фактическое Commit не происходит до тех пор, пока не будет выведен TransactionScope. Если Commit сбой по какой-либо причине, будет выбрано исключение. Вы должны выхватить это исключение и поместить свою логику для неудачной транзакции в блок Catch. Если исключение не было выбрано, вы должны быть уверены, что Commit был успешным. Если по каким-либо причинам, о которых я не могу думать, вы не доверяете фреймворку, вы всегда можете создать другой масштаб и запросить результаты, чтобы убедиться, что они были применены.
var transactionFailed = false;
try
{
using (var tx = new TransactionScope())
{
tx.Complete();
}
}
catch (TransactionAbortedException ex)
{
transactionFailed = true;
writer.WriteLine("TransactionAbortedException Message: {0}", ex.Message);
}
catch (ApplicationException ex)
{
transactionFailed = true;
writer.WriteLine("ApplicationException Message: {0}", ex.Message);
}
catch (Exception ex)
{
transactionFailed = true;
writer.WriteLine("Exception Message: {0}", ex.Message);
}
Да. Просто добавьте переменную и проверьте ее.
bool txExecuted;
using (var tx = new TransactionScope())
{
//code
if (code was OK)
{
tx.Complete();
txExecuted = true;
}
}
[TransactionScope] (http://msdn.microsoft.com/en -us/library/system.transactions.transactionscope.aspx) не имеет метода Commit. Он имеет метод [Завершить] (http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.complete.aspx), но вызов этого метода не обязательно фиксирует транзакцию. – lightbricko
Я хочу знать, что что-то пошло не так с транзакцией, а не с кодом. – MikeAlike234
@ david2342 - если конец области транзакции достигнут, и Complete не вызван успешно, тогда его откат и переменная не установлены. – StingyJack
Касательно документации MSDN https://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.complete(v=vs.110).aspx
// Полный метод совершает сделки. Если выбрано исключение,
// Завершено не вызывается и транзакция откатывается.
метод completeCallback будет вызывать только после того, как sucessfull transactionScope.Complete) исполнения (метод
Таким образом, вы можете использовать функцию:
public bool TryRunTransaction(Action transactionAction)
{
try
{
using (var transactionScope = new TransactionScope())
{
transactionAction();
transactionScope.Complete();
}
return true;
}
catch (TransactionAbortedException)
{
return false;
}
}
- 1. TransactionScope и транзакция SQL
- 2. Как узнать, успешно ли выполнена транзакция БД?
- 3. C# - TransactionScope - TransactionAbortedException - транзакция прервана
- 4. Dapper + Oracle + TransactionScope = транзакция отменена
- 5. Подтвердить, была ли успешно выполнена вставка
- 6. Как проверить, была ли выполнена инструкция XSLT
- 7. Проверьте, не была ли выполнена функция javascript.
- 8. git: проверьте, была ли выполнена последняя выборка
- 9. Php проверить, была ли выполнена команда shell_exec
- 10. Как проверить, была ли выполнена команда?
- 11. Чтение как была выполнена функция
- 12. Detect, если функция была выполнена
- 13. SSIS проверяет, была ли удалена запись
- 14. Действительно ли транзакция выполнена правильно в этом запросе?
- 15. Утвердить, что функция была выполнена
- 16. EmberJS Определите, когда транзакция выполнена успешно
- 17. Транзакция выполнена в режиме Sandbox Authorize.Net
- 18. SQL-транзакция всегда была поймана
- 19. Count Количество раз Программа была выполнена
- 20. Как узнать, была ли выполнена задача в crontab
- 21. Возможно ли узнать, какая нить была выполнена первой?
- 22. Как проверить, действительно ли строка кода была выполнена?
- 23. Как определить, была ли прокрутка UITableView выполнена, нажав на индекс?
- 24. Как узнать, была ли сборка выполнена без сбоев
- 25. Проверьте, была ли ранее выполнена учетная запись Twitter.
- 26. Как проверить с помощью hspec, была ли выполнена функция readerError
- 27. Как узнать, какая активность была выполнена последней
- 28. остановка нить, когда задача была выполнена в C#
- 29. определить, что Линия Функция была выполнена из
- 30. Обновление таблицы, которая уже была выполнена PHP
FWIW, ApplicationException считается мертвым классом. – StingyJack