Nhibernate не актуализира каскадна връзка на Win Server 2008

Ние използваме NHibernate с Fluent картографиране, за да създадем приложение WebForms.

В нашия модел имаме проста връзка References с набор Cascade.All(). Когато запазим обекта, NH се държи според очакванията и 1) записва референтния обект, 2) актуализира родителския обект, задавайки дъщерния ключ.

Внедряването на същата тази версия на нашия производствен сървър (Win Server 2008) и насочването на приложението към същата база данни обаче води до различен резултат. NH 1) записва референтния обект и.. и.. това е, нищо друго не се случва!!

Знам, че нашите тестови и производствени среди трябва да са еднакви и т.н., и т.н., но ние внедряваме в момента и просто не мога да разбера как може да се случи това.

Има ли някакъв известен проблем с NH в Win 2008 Server относно разрешенията за асемблиране или нещо подобно? Изглежда, че проксито не работи правилно по някаква причина, но наистина не мога да кажа защо!

РЕДАКТИРАНЕ 1: Анализирайки регистрационните файлове на NH, можах да открия, че NH не отбелязва, че посоченото свойство се е променило в Win Server 2008. Защо? Нямам идея, но изглежда все повече и повече проблем с проксито.

Всяка помощ наистина се оценява.

Филипе


person jfneis    schedule 30.08.2010    source източник
comment
Включили ли сте nHibernate регистриране. Има ли нещо там, което може да предполага някакво несъответствие.   -  person David Christiansen    schedule 30.08.2010
comment
@David, редактира публикацията, която го информира. Ще се опитам да сменя Castle с друг прокси, за да видя дали нещо ще се промени.   -  person jfneis    schedule 30.08.2010


Отговори (1)


Най-накрая открих какво причинява проблема. NH не актуализираше връзката, защото нямаше транзакция, покриваща извлеченията.

На пръв поглед не изглежда логично, но има други ситуации, при които NH се държи правилно само ако имате отворена транзакция (напр.: NHibernate FlushMode Auto Not Flushing Before Find). Имахме тази ситуация в други проекти и теорията пасва.

Но какво да кажем за Windows Server 2008? Всъщност проблемът беше в нашия файл web.config с IIS 7. Тъй като използваме автоматичен контрол на транзакциите с дизайн OpenSessionInView, ние регистрираме httpModules елемент. Но в IIS 7 трябва да регистрираме modules елемент, а ние го нямахме. Тъй като не беше конфигуриран, нямахме транзакция, а без транзакция нещата не работят.

Научен урок №1: повече от всякога транзакциите са ЗАДЪЛЖИТЕЛНИ при използване на NHibernate. Научен урок №2: никога не деактивирайте съобщенията за съвместимост на IIS (защо някой е направил това?).

Филипе

person jfneis    schedule 31.08.2010