Лучшие практики NHibernate для транзакций [закрыто]

Я читал о Nhibernate некоторое время и пытался использовать его для сайта, который я реализую. Я прочитал статью Билли МакКафферти о лучших практиках NHibernate, но не увидел никаких указаний на то, где лучше всего проводить транзакции.

Я думал о том, чтобы поместить этот код в объект доступа к данным (DAO), но потом я не уверен, как обрабатывать случаи, когда используется более одного DAO. Как лучше всего разместить код транзакции в вашем приложении NHibernate?

11.12.2008 18:50:58
3 ОТВЕТА
РЕШЕНИЕ

Это действительно зависит от вашей среды. Например, мы используем шаблон Open-Session-In-View (ссылка Java, но шаблон тот же в .Net) на сайте ASP.Net и используем HttpModule для управления сеансами и транзакциями. HttpModule открывает сеанс и запускает транзакцию в событии BeginRequest, а затем фиксирует транзакцию и закрывает сеанс в событии EndRequest.

Различные среды и шаблоны коммуникации приведут к различным стратегиям управления сеансами / транзакциями.

Существует много дискуссий о различных стратегиях в группе пользователей NHibernate, а также в Интернете в целом.

10
3.01.2009 03:09:44

Исходя из Ayende, вам, вероятно, нужно явно добавить транзакцию для всех, даже для поиска. Пожалуйста, проверьте здесь: http://nhprof.com/Learn/Alerts/DoNotUseImplicitTransactions

11
17.04.2010 04:37:15

Самый простой способ - использовать умную транзакцию, описанную в

http://rajputyh.blogspot.com/2011/02/nested-transaction-handling-with.html

Он использует популярный NHibernateSessionManager, и написан простой класс, чтобы гарантировать, что «вы открываете транзакцию, когда хотите», не беспокоясь о том, какая родительская логика и вспомогательная логика обрабатывает транзакцию.

0
19.04.2011 16:05:16