Если вы используете TransactionScope
для этого, то транзакция только физически открывается при первом доступе к базе данных.Стоимость неиспользованной области действия чрезвычайно низкая.
Если вы используете обычные транзакции EF, то пустая транзакция попадет в базу данных три раза:
- BEGIN TRAN
- COMMIT
- Сброс соединения для пула соединений
Каждый из них имеет чрезвычайно низкую стоимость.Вы можете проверить стоимость этого, просто выполнив это 100000 раз в цикле.Вполне может быть, что вас не волнует эта небольшая стоимость.
Я бы все же посоветовал против этого.По моему опыту, веб-приложения требуют большей гибкости, чем 1: 1 соответствие веб-запроса и транзакции.Кроме того, правило использования кода состояния HTTP для определения транзакции окажется негибким.
Кроме того, вы должны выбрать уровень изоляции (и, возможно, время ожидания) для каждой транзакции.В начале HTTP-запроса неизвестно, каковы правильные значения.Только действие знает.
У меня был хороший опыт использования одного контекста EF на HTTP-запрос, а затем ручного использования транзакций внутри каждого действия.Накладные расходы с точки зрения LOC очень малы.Нет необходимости в централизации.