Обхват на транзакции
TransactionScope е клас в System.Transactions, който идва с .NET рамката. Ако TransactionScope бъде пуснат без да се извиква методът Complete (TransactionScope реализира интерфейса IDisposible, препоръчва се използването на block), тогава операцията ще се счита за неуспешна и ще върне изпълнението назад. TransactionScope е полезен API, който управлява транзакциите ("about" означава, че бази данни, поддържащи TransactionScope, могат автоматично да управляват транзакции), а повечето основни бази данни поддържат този API, включително и MSSQL на Microsoft, разбира се. Ако използвате база данни или някаква транзакционна система, която не поддържа TransactionScope, все още можете да използвате интерцептора, но ще трябва да модифицирате кода си, за да използвате подходящ API, който поддържа транзакции (например използване на BeginTransaction API, за да получите реализацията на IDbTransactions от доставчика на базата данни).
Горното е персонализирано изключение, което умишлено използвах, за да видя дали може да се върне нормално, а снимката по-долу е нормално изпълнение, без изключения.
Извикването на метода Complete на TransactionScope показва, че транзакцията е успешно изпълнена. Разбира се, ако транзакцията винаги се изпълнява, тогава тя не е необходима. Причината за транзакциите е да се реши проблемът с провала в множество операции, а ако има провал, той ще бъде върнат назад. Защото . TransactionScope на .NET няма изрично обаждане за връщане назад, а най-близкият еквивалент е използването на метода Dispose. Ако TransactionScope бъде пуснат преди да бъде извикан методът Complete, тогава TransactionScope извършва връщане назад. Затова трябва да се добави Dispose call към лицето на интерцептора на транзакции, за да се извърши връщането назад.
Накрая, прикачете кода!
Приложен е изходният код:Туристи, ако искате да видите скритото съдържание на този пост, моля Отговор
|