Обсяг транзакцій
TransactionScope — це клас у System.Transactions, який є класом, що йде в рамках .NET-фреймворку. Якщо TransactionScope випускається без виклику методу Complete (TransactionScope реалізує інтерфейс IDisposible, рекомендується використовувати блок), тоді операція буде визнана невдалою і відкотить виконання назад. TransactionScope — це корисний API, який керує транзакціями ("around" означає, що бази даних, які підтримують TransactionScope, можуть автоматично керувати транзакціями), і більшість основних баз даних підтримують цей API, включно з MSSQL від Microsoft, звісно. Якщо ви використовуєте базу даних або систему, пов'язану з транзакціями, яка не підтримує TransactionScope, ви все одно можете використовувати перехоплювач, але вам доведеться змінити свій код, щоб використовувати відповідний API для підтримки транзакцій (наприклад, використання API BeginTransaction для отримання реалізації IDbTransactions від провайдера баз даних).
Вищенаведене вище — це кастомний виняток, який я навмисно додав, щоб перевірити, чи можна його відкотити нормально, а зображення нижче — це звичайне виконання, без винятків.
Виклик методу Complete у TransactionScope означає, що транзакція успішно виконана. Звісно, якщо транзакція завжди виконується, то вона не потрібна. Причина, чому існують транзакції, полягає у вирішенні проблеми невдач у кількох операціях, і якщо вона відбувається, її відкидають назад. Тому що . У .NET TransactionScope немає явного виклику відкату, і найближчим еквівалентом є використання методу Dispose. Якщо TransactionScope випущено до виклику методу Complete, тоді TransactionScope виконує відкат. Тому для здійснення відкату потрібно додати виклик Позбавлення.
Нарешті, додайте код!
Додається вихідний код:Туристи, якщо ви хочете побачити прихований контент цього допису, будь ласка Відповідь
|