Как правильно использовать TransactionScope?
Я всегда хочу попробовать использовать TransactionScope
, но я просто не могу понять, что люди видят в этом, что полезно. Итак, возьмем пример:
using(TransactionScope tran = new TransactionScope()) {
CallAMethodThatDoesSomeWork1();
CallAMethodThatDoesSomeWork2();
tran.Complete();
}
Итак, самый основной вопрос: как написать "CallAMethodThatDoesSomeWork1()
", чтобы он знал, как отбросить свои действия, если пусть "CallAMethodThatDoesSomeWork2()
" выдает исключение?
Ответы
Ответ 1
Код в методах, которые вы вызываете, должен быть осведомлен о транзакции и завершать активную транзакцию. Это означает создание или использование классов, которые являются менеджерами ресурсов (см. Внедрение собственного менеджера ресурсов.
Вы делаете это, реализуя IEnlistmentNotification и завершая транзакцию. Когда транзакция будет завершена, менеджер транзакций вызовет методы, определенные на этом интерфейсе, чтобы ваш код мог выполнять/отменять работу.