.NET TransactionScope класс и T-SQL TRAN COMMIT и ROLLBACK

В настоящее время я пишу приложение, которое потребует нескольких вставок, обновлений и удалений для моего бизнес-объекта. Я использую класс TransactionScope, чтобы гарантировать, что все хранимые процедуры могут фиксироваться или откатываться как единая единица работы.

Мой вопрос: я должен также использовать COMMIT TRAN, а ROLLBACK TRAN - это каждая из моих хранимых процедур, если я использую класс TransactionScope в своей библиотеке классов .NET?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
4 570
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

В этом не должно быть необходимости - это нужно обрабатывать в пределах TransactionScope. Это немного зависит от того, что именно вы делаете и как обрабатываете транзакцию (явную или неявную). Подробнее ЗДЕСЬ

Я обрабатываю только явные транзакции.

Michael Kniskern 10.10.2008 03:28
Ответ принят как подходящий

В 2005 году в этом нет необходимости, в 2000 году я бы, кроме того, обычно помещал область транзакций в блок «using».

При использовании на 2000 и старше по сравнению с 2005 годом возникают некоторые проблемы с производительностью.

См. здесь

Спасибо

Нет, вам не нужны явные транзакции, если вы используете TransactionScope для ваших транзакций, однако: важный вам, вероятно, следует установить Transaction Binding=Explicit Unbind; в строке подключения. Полная информация - здесь, но в противном случае вы можете получить откат первых нескольких операций, а несколько последних фиксации (или, скорее, выполнение вне какой-либо транзакции).

Если вы зарегистрированы в TransactionScope или CommittableTransaction, я настоятельно рекомендую вам явно создать НЕТ свои собственные локальные транзакции, используя begin transaction или SqlConnection.BeginTransaction.

TransactionScope / CommittableTransaction - это другое «семейство» и являются взаимоисключающими с begin transaction / SqlTransaction.

Поэтому я не согласен с Саифом Ханом. Это правда, что System.Transactions имеет проблемы с производительностью на Sql 2000, поэтому, возможно, лучше использовать SqlTransaction или begin transaction. Однако, если вы это сделаете, вам НЕ следует также использовать TransactionScope / CommittableTransaction.

Кстати, поведение, описанное Марком Гравеллом, было изменено в .Net 4.0. Даже если вы не используете Explicit Unbind, больше невозможно откатить некоторые команды, а некоторые зафиксировать. (Однако он прав, что в более старых версиях вы должны использовать Explicit Unbind).

Другие вопросы по теме