Замковые сооружения NHibernateIntegration и замковые сооружения NHibernate

Может ли кто-нибудь пролить свет на разницу этих двух? Я хочу свободно использовать Nhibernate, поддержку которого обеспечивает второе средство. Но я также хочу использовать модуль http (SessionWebModule) для поддержки открытого сеанса в представлении, который, похоже, находится в первом объекте. Совместимы ли они, должен ли я использовать оба?


person Konstantin    schedule 16.06.2011    source источник


Ответы (1)


Я создатель NHibernate Facility и коммиттер Castle.Transactions. (не участвует в программе интеграции NHibernate)

Я создал объект NHibernate как проект, предназначенный только для объектов Windsor. В основном он работает с концепцией сеанс на транзакцию, а не сеанс на запрос. Тем не менее, в c'tor NHibernateFacility вы можете передать перечисление, которое делает стиль жизни по умолчанию сеанс на запрос.

Они несовместимы, как видно из номеров версий. NHibernate Facility совершенно новый (но в производстве, потому что он очень-очень маленький). NHibernate Integration, с другой стороны, является официальным продуктом.

NHibernate Facility требует, чтобы вы использовали Transactions 3.0, которая на данный момент является бета-версией. Поддержка tx полностью есть, но не транзакционные биты NTFS.

Я использую свой собственный NHibernate Facility для своих собственных проектов, и он работает очень хорошо. YMMV.

person Henrik    schedule 16.06.2011
comment
Он выглядит великолепно (то есть Nhibernate Facility). У меня все работает, завтра посмотрю ваш совет - person Konstantin; 16.06.2011
comment
Кстати, нужно ли что-то еще сделать, чтобы запустить сеанс для каждого запроса? Например, запуск транзакции с использованием http-модуля? - person Konstantin; 17.06.2011
comment
Просто передайте правильное значение перечисления в c'tor NHibernateFacility. Транзакции сбросят ISession. - person Henrik; 17.06.2011
comment
Разница между объектами NHibernateIntegration и замковыми объектами NHibernate больше похожа на разницу между Народным фронтом Иудеи и Народным фронтом Иудеи. - person PandaWood; 30.11.2012
comment
Ага :) Мое мнение, что они выбрасывают NHibernateIntegration, потому что у меня паритет функций с гораздо меньшим размером LOC. - person Henrik; 30.11.2012
comment
Ах да, я не понимал, что они имеют паритет функций, и теперь у меня проблемы с зависимостями nuget NibernateIntegration, так что, похоже, я должен воспользоваться этой возможностью, чтобы попытаться переключиться. Я просто в основном использую функцию атрибута [Транзакция]. - person PandaWood; 03.12.2012
comment
Очень странно, но реализация с помощью ... _container.AddFacility‹AutoTxFacility›() .Register(Component.For‹INHibernateInstaller›().ImplementedBy‹ExampleInstaller›()) .AddFacility‹NHibernateFacility›( f =› f.DefaultLifeStyle = DefaultSessionLifeStyleOption .SessionPerWebRequest); ... и при настройке HttpModule изменения не сохраняются, если только они не сбрасываются явно... - person Ted; 24.05.2013
comment
О, вызывающий метод должен быть помечен [Transaction]. Я ошибочно предположил, что об этом позаботилась какая-то внутренняя магия PerWebRequest. - person Ted; 24.05.2013
comment
Да, и вам нужно знать, где вы размещаете этот атрибут, потому что средство предназначено для одной транзакции для бизнес-операции; не имеют вложенных вызовов [Transaction]. - person Henrik; 24.05.2013