Транзакции NHibernate в открытом просмотре за сеанс - рекомендуемые практики? - PullRequest
1 голос
/ 25 декабря 2008

Очистка некоторой транзакционной логики и удивление, как другие люди обращаются с ней.

Похоже, что Ayende рекомендует обрабатывать транзакции на границе сервиса. Это веб-приложение ASP.NET, поэтому у него нет четкой границы обслуживания, по крайней мере, сейчас.

Что делают люди?

  • Создать одну транзакцию на запрос в HttpModule и обрабатывать фиксацию в EndRequest, откат при ошибке?
  • Создавать транзакции в реальных «сервисах» в приложении и обрабатывать его в нескольких местах?
  • Что-то еще?

Ответы [ 2 ]

1 голос
/ 15 февраля 2009

Вы можете использовать IoC-контейнер для своего уровня обслуживания, и контейнер может управлять транзакцией и сеансом Nibenrate.

Ваш контроллер WebApp => уровень вызова (A) => вызов (B) одного или нескольких методов DAO /operations.

Контейнер IoC, такой как Spring.NET, будет управлять областью TX, например, в (A) и предоставит сеанс для вашего DAO в (B). Фиксация (или откат) будет обработана в конце вызова уровня обслуживания.

0 голосов
/ 27 декабря 2008

Большинство людей используют стратегию сеанса для запроса, как указано в первом пункте. Однако я не верю, что транзакция должна быть зафиксирована в EndRequest. На многих веб-страницах было бы проще зафиксировать транзакцию на основе действий пользователя (например, нажав «Отправить») и позволить EndRequest просто обработать удаление сеанса.

Насколько я могу судить, нет необходимости создавать HttpModule, поскольку в global.asax можно создать те же функции: http://forum.hibernate.org/viewtopic.php?t=993041.

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