Должен ли я использовать транзакцию в своем коде .NET, если я определяю транзакции в хранимых процедурах, которые я вызываю? - PullRequest
0 голосов
/ 30 декабря 2011

Я бы рискнул предположить, что, если я сделаю это в ОБАХ местах, возникнут «ограниченные» проблемы с управлением транзакциями.

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

Спасибо,

Ответы [ 2 ]

2 голосов
/ 30 декабря 2011

Вы можете иметь транзакции на обоих уровнях, если каждый вызванный слой знает о существующих транзакциях.

Так что, если вы ожидаете повторного использования хранимого процесса, вы можете сообщить об этом транзакции, запущенной изклиентский код, другой сохраненный процесс и не выполнять никаких операций start / commit / rollback.

Если он не обнаружил транзакцию, он может начать / commit / rollback самостоятельно.

Это поведениеэто важно, потому что SQL Server на самом деле не имеет вложенных или автономных транзакций: поэтому сделайте каждый сохраненный процесс безопасным, и вам не нужно об этом думать.

Шаблон в моем ответе здесь обнаружит транзакцию и сделает точноthis:
Вложенные хранимые процедуры, содержащие шаблон TRY CATCH ROLLBACK?

0 голосов
/ 30 декабря 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...