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