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