SqlException внутри TransactionScope - PullRequest
       6

SqlException внутри TransactionScope

1 голос
/ 21 января 2011

В настоящее время я работаю над устаревшим проектом в VB.NET 2.0. В проекте есть очень забавный DAL-слой, который не включает транзакции: - | В любом случае, моя работа - сделать некоторые части программы транзакционными, а я не иметь доступ к коду уровня DAL. Поэтому я пытаюсь поместить целые разделы кода в один TransactionScope.

Теперь вот проблема: Когда SqlException генерируется где-то глубоко в слое DAL, моя транзакция всегда откатывается! Даже если я поймаю и обработаю исключение внутри того же TransactionScope.

Мой вопрос: это нормальное поведение? и что я могу с этим поделать?

Я думаю, это нормально, что транзакция откатывается, когда исключение выбрасывается за пределы TransactionScope, но не если исключение обрабатывается в этих пределах!

Любая помощь будет высоко ценится!

Редактировать: SqlException фактически выдается из System.Data.Common.SqlCommand, поэтому я не могу остановить его. С уважением, LDX

1 Ответ

0 голосов
/ 29 марта 2011

Хорошо, я собираюсь отозвать ответ, который у меня был ниже, который я отредактировал, чтобы не запутать кого-либо более чем необходимого ... :)

После дополнительного тестирования я определил, что если обычные исключения будут перехвачены и обработаны (не переброшены), транзакция будет завершена, как и ожидалось. Может случиться так, что определенные классы исключений (такие как sql исключения, участвующие в этой транзакции) всегда могут сделать недействительными транзакции в корневой области, даже если они обрабатываются, но я не проверял это, поэтому не могу подтвердить эту теорию.

Извините!

Да, это похоже на дизайн. Из документации по транзакции:

[вычеркнуть неверную информацию]

...