TransactionScope
TransactionScope — это класс в System.Transactions, который поставляется в рамках .NET-фреймворка. Если TransactionScope освобождается без вызова метода Complete (TransactionScope реализует интерфейс IDisposible, рекомендуется использовать block), то операция будет считаться неудачной и откатывает выполнение. TransactionScope — это полезный API, который управляет транзакциями («about» означает, что базы данных, поддерживающие TransactionScope, могут автоматически управлять транзакциями), и большинство основных баз данных поддерживают этот API, включая, конечно, собственный MSSQL Microsoft. Если вы используете базу данных или систему, связанную с транзакциями, которая не поддерживает TransactionScope, вы всё равно можете использовать перехватчик, но вам придётся изменить код, чтобы использовать подходящий API для поддержки транзакций (например, использование API BeginTransaction для получения реализации IDbTransactions от провайдера базы данных).
Приведённое выше — это пользовательское исключение, которое я специально добавил, чтобы проверить, можно ли откатить его нормально, а изображение ниже — это обычное выполнение, без исключений.
Вызов метода Complete в TransactionScope означает, что транзакция успешно выполнена. Конечно, если транзакция всегда выполняется, то она не нужна. Причина, по которой существуют транзакции, заключается в решении проблемы сбоя в нескольких операциях, и если произойдёт сбой, она будет откатена. Потому что . В .NET TransactionScope нет явного вызова отката, и ближайший эквивалент — использовать метод Dispose. Если TransactionScope выпущен до вызова метода Complete, TransactionScope выполняет откат. Поэтому на лицевой панель перехватчика транзакций необходимо добавить вызов Dispose для выполнения отката.
Наконец, приложите код!
Прилагается исходный код:Туристы, если вы хотите увидеть скрытое содержание этого поста, пожалуйста Ответ
|