Я везде искал в Интернете ответ на проблему, с которой столкнулся на работе, но безрезультатно.Таким образом, у нас есть TransactionScope, и в операторе using, который объявляет эту область, у нас есть несколько вызовов методов async / await для написания запросов к одной базе данных, например:
using(var ts = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)()
{
await repository.InsertQuery1Async(item);
await repository.InsertQuery2Async(item);
await repository.InsertQuery3Async(item);
ts.Complete();
}
Каждый из этихЗапросы представляют вставку в отдельную таблицу.Проблема заключается в том, что InsertQuery2Async, по-видимому, завершился ошибкой в единичном случае, судя по сообщенной ошибке, из-за которой я обнаружил, что в базовую таблицу этого запроса не было вставлено ни одной записи.Я не смог воспроизвести эту ошибку, но я сбит с толку, как это могло произойти.
Если есть ошибка в любом из этих методов запроса, если TransactionScope не обнаружит это и откатит всю транзакциюназад?
Из того, как это выглядит из этого изолированного случая, видно, что Query1 и Query3 успешно зафиксированы, потому что я проверил базовые таблицы базы данных для параметра, переданного этим методам, и успешно нашел записи.Но записи отсутствуют для таблицы, связанной с Query2.Я что-то упускаю из-за того, как объекты Task и их исключения работают с TransactionScope?В чем может быть проблема здесь?