Я использую .NET 2.0 и SQL Server 2005. По историческим причинам код приложения использует SQLTransaction, но некоторые хранимые процедуры также используют операторы T-SQL begin / commit / rollback tran. Идея состоит в том, что DBTransaction может охватывать много хранимых процедур, которые каждый отдельный sproc контролирует, что происходит в его области действия - по сути, это вложенные транзакции.
Старое поведение кода заключалось в том, что в случае сбоя любого из sprocs логика приложения также вызывала бы откат внешней SQLTransaction. Но теперь мы хотим изменить логику так, чтобы, даже если произошел сбой, внешняя транзакция продолжила выполнение оставшихся sprocs в своей последовательности, а затем в конце, так как мы знаем, что были сбои, мы выполняем откат всей SQLTransaction.
Проблема заключается в том, что, по крайней мере, так как это в настоящее время закодировано, заключается в том, что если какой-либо из sprocs выполняет ROLLBACK, внешняя транзакция SQLT потеряет свое соединение, поэтому любая последующая попытка повторного использования транзакции завершится неудачей. Есть ли способ откатить в T-SQL, но по-прежнему поддерживать внешнюю транзакцию SQL? Я думал, что, возможно, точки сохранения могут быть полезны здесь, но я их пока не очень хорошо понимаю.
Что усложняет эту ситуацию, так это то, что не всегда существует внешняя транзакция, поэтому я не могу просто удалить откаты T-SQL, т.е. иногда sproc выполняется сам по себе; иногда в контексте транзакции.
Упростит ли переключение на TransactionScope?
Спасибо за любые предложения ... Майк