Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 25346|Відповідь: 2

[Джерело] Використання TransactionScope у C#

[Копіювати посилання]
Опубліковано 10.04.2017 10:16:25 | | | |
Обсяг транзакцій

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 виконує відкат. Тому для здійснення відкату потрібно додати виклик Позбавлення.


Нарешті, додайте код!


Додається вихідний код:
Туристи, якщо ви хочете побачити прихований контент цього допису, будь ласкаВідповідь






Попередній:Оператор CREATE DATABASE не дозволяється в транзакції з кількома операторами
Наступний:Зробити динамічні поля OrderBy Linq
 Орендодавець| Опубліковано 10.04.2017 10:20:30 |
Клас TransactionScope можна використовувати вкладено, і якщо ви хочете його вкладено, потрібно вказати параметр TransactionScopeOption у блоці вкладених транзакцій. Параметр за замовчуванням — Required.

Коли потрібна TransactionScopeOption вкладеного класу TransactionScope, ви можете побачити наступний результат: їхні транзакції мають однаковий ідентифікатор. Більше того, це справжній успіх лише тоді, коли обидва TransactionScope завершені.

Якщо встановити TransactionScopeOption на RequiresNew, вкладені блоки транзакцій і зовнішні блоки транзакцій є незалежними і не впливають один на одного.

TransactionScopeOption встановлений на Suppress для скасування транзакції поточного блоку, який зазвичай використовується рідко.
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com