NHibernate ISession и автоматическая очистка / принятие транзакций в моей единице работы - PullRequest
2 голосов
/ 29 июня 2010

Я создал объект IDbContext, который предоставляется моим реализациям IRepository.DbContext позволяет моей бизнес-логике создавать, фиксировать и откатывать транзакции и фиксировать их по мере необходимости.Он также переносит мою сессию NHibernate IS, так что моя реализация NHebernate IRepository может получить к ней доступ.

Я использую эту настройку в веб-приложении, где один DbContext создается для запроса и используется всеми репозиториями.В конце запроса я избавляюсь от сеанса ISession.

Исходя из вашего опыта или знаний стандартных практик NHibernate, допустимо ли очищать мой DbContext и фиксировать любые незавершенные транзакции (при условии, что ошибок нет), когда я избавляюсь и собираюсь закрыть сессию?

Ответы [ 2 ]

1 голос
/ 29 июня 2010

Это обычная практика и, безусловно, приемлемая, однако я не одобряю ее. Я думаю, что у этого есть существенный недостаток в том, что конец запроса слишком поздно, чтобы выполнить значимую обработку исключений. Я предпочитаю обрабатывать транзакции на странице, чтобы я мог перехватывать исключения и обрабатывать их там. Фактически, я выкидываю исключение в обработчик EndRequest, если текущая ISession имеет открытую транзакцию.

1 голос
/ 29 июня 2010

Да, в последний раз, когда я проверял, я считаю, что это архитектура, используемая в S # arp Architecture.Это также логично, я думаю - если бы не было ошибок, почему бы вам не захотеть передать все в базу данных?

...