Является ли Единица работы более эффективной, если мне не нужны транзакции и т. Д.? - PullRequest
0 голосов
/ 29 мая 2009

Если у меня есть 10 вызовов базы данных на моей веб-странице, и ни один из них не требует каких-либо транзакций и т. Д. Они просто получают данные из базы данных (читает), я все еще должен использовать единицу рабочего класса?

Это потому, что создание нового сеанса для каждого вызова базы данных слишком дорого?

Ответы [ 2 ]

0 голосов
/ 01 июня 2009

Да, вы должны использовать транзакцию. Из блога Айенде:

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

Для получения более подробной информации, вот ссылка на его запись в блоге:

http://ayende.com/Blog/archive/2008/12/28/nh-prof-alerts-use-of-implicit-transactions-is-discouraged.aspx

0 голосов
/ 29 мая 2009

В NHibernate создание фабрики сеансов очень дорого (поэтому вы захотите кэшировать фабрику сеансов после ее создания, вероятно, на HttpApplication), но создание сеансов очень дешево. Другими словами, если он обеспечивает чистоту вашего кода, создание нескольких сеансов не обязательно является плохой вещью. Я думаю, что в документации NH это сказано лучше:

ISessionFactory является дорогой в создании, потокобезопасный объект предназначен для общего пользования всеми темы приложений. ISession - это недорогой, не поточечный объект это должно быть использовано один раз, для одного бизнес-процесс, а затем отбрасывается.

Таким образом, использование шаблона UoW, вероятно, не является более эффективным из-за дополнительных накладных расходов, но это хорошая практика, и накладные расходы, вероятно, не причинят вам вреда. Преждевременная оптимизация и все такое.

...