Должен ли я обернуть каждый вызов БД в транзакции? - PullRequest
0 голосов
/ 03 июля 2011

Я написал класс TransactionContext, который создается на прикладном уровне и отправляется на бизнес-уровень и уровень данных, что позволяет использовать вложенные транзакции.Теперь я должен решить: 1. Должен ли я использовать явные транзакции и позволить каждой функции вызывать, фиксировать или откатывать транзакцию при необходимости?2. Я могу запустить транзакцию неявно, когда TransactionContext создан, и позволить вложенным методам только откатывать

Теперь я бы использовал второй подход, потому что код проще: не нужно начинать, фиксировать или откатывать в каждом методе,просто установите флаг отката для транзакции и пусть только самый верхний метод беспокоится о коммите или откатеПроблема в том, что я не уверен, является ли хорошая идея обернуть весь трафик базы данных в транзакции.

Каковы возможные негативные эффекты от обертывания всех вызовов базы данных внутри транзакции?

Моя настройка - ASP.NET appliction и база данных MSSQL Server.Возможно, что приложение и база данных будут на разных серверах, если это что-то, что влияет на решение.

1 Ответ

3 голосов
/ 03 июля 2011

Отдельные операторы SQL уже заключены в неявную транзакцию. Используйте транзакцию там, где это необходимо, т.е. при обновлении нескольких таблиц в элементарной операции. Перенос всех вызовов в БД не является хорошей идеей: это может привести к снижению пропускной способности и блокировке.

Хотя SQL Server поддерживает вложенные транзакции, они могут работать не так, как вы ожидаете:

Передача внутренних транзакций игнорируется базой данных SQL Server Двигатель. Транзакция либо совершено или отменено на основе действие, предпринятое в конце внешняя сделка. Если внешний сделка совершена, внутренняя вложенные транзакции также совершено. Если внешняя транзакция откатился, потом все внутреннее транзакции также откатываются, независимо от того, является ли внутренний транзакции были индивидуально привержен.

Ссылка: Вложенные транзакции

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