Лучшие практики NHibernate
Я читал о Nhibernate некоторое время и пытался использовать его для сайта, который я реализую. Я читал статью Билли МакКафферти о лучших практиках NHibernate, но я не видел никаких указаний о том, где лучше всего обрабатывать транзакции.
Я думал о том, чтобы поместить этот код в объект доступа к данным (DAO), но тогда я не уверен, как обрабатывать случаи, в которых используется более одного DAO. Каковы наилучшие места для ввода кода транзакции в вашем приложении NHibernate?
Ответы
Ответ 1
Это действительно зависит от вашей среды. Например, мы используем Open-Session-In-View (ссылка Java, но шаблон такой же в. Net) на ASP.Net и использовать HttpModule для управления сеансами и транзакциями. HttpModule открывает сеанс и запускает транзакцию в событии BeginRequest, а затем совершает транзакцию и закрывает сеанс в событии EndRequest.
Различные среды и шаблоны связи приведут к различным стратегиям управления сеансом/транзакциями.
Существует много дискуссий о различных стратегиях в группе пользователей NHibernate, а также в Интернете в целом.
Ответ 2
На основе Ayende вам, вероятно, необходимо явно добавить транзакцию для всех, даже для поиска. Пожалуйста, проверьте здесь:
http://nhprof.com/Learn/Alerts/DoNotUseImplicitTransactions
Ответ 3
Самый простой способ - использовать Smart Transaction, описанную в
http://rajputyh.blogspot.com/2011/02/nested-transaction-handling-with.html
Он использует популярный NHibernateSessionManager, и простой класс написан для обеспечения того, чтобы "вы открывали транзакцию, когда хотите", не беспокоясь о том, какая родительская логика и подзаголовка обрабатывает транзакцию.