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





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