Является ли единица измерения более эффективной, если я не забочусь о транзакциях и т.д.?

StackOverflow https://stackoverflow.com/questions/925919

  •  06-09-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top