Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 25346|Ответ: 2

[Источник] Использование TransactionScope в C#

[Скопировать ссылку]
Опубликовано 10.04.2017 10:16:25 | | | |
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 для выполнения отката.


Наконец, приложите код!


Прилагается исходный код:
Туристы, если вы хотите увидеть скрытое содержание этого поста, пожалуйстаОтвет






Предыдущий:Оператор CREATE DATABASE не разрешен в транзакции с несколькими операторами
Следующий:Сделать Linq's OrderBy поддерживать динамические поля
 Хозяин| Опубликовано 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