2010-06-03 2 views
1

У меня есть приложение, которому сейчас 4+ лет, который демонстрирует нечетное поведение в нашем последнем развертывании. Приложение использует nHibernate для всех вставок/обновлений/выборок и т. Д. В настоящее время мы используем .NET 2.0 и nHibernate 1.2 (я знаю, нам нужно обновить)NHibernate не будет вставлять запись

Это развертывание находится на Windows 2008 Server x64, IIS 7.5 - то, что я видел до сих пор, заключается в том, что приложение запускается, но не может вставлять или обновлять записи в БД - чтение пока кажется прекрасным, но записи являются проблемой. Некоторые работы на самом деле работают, вставляются в некоторые небольшие таблицы, но большинство из них даже не попадают в БД.

Использование SQL Profiler, вставка/обновления никогда не попадают на сервер и не превращают log4net в DEBUG и show_sql true - появляются инструкции выбора, но инструкции insert/update никогда не попадают в журнал вообще, и никогда не появляться на сервере.

Что еще более странно, так это то, что приложение, похоже, не обращает внимания на это: commandandclose работает без исключения (открытый сеанс в представлении с помощью httpmodule), объекты домена возвращаются сгенерированными uuid и т. Д., Но никогда не сохраняются.

Конечно, обновление должно произойти, но мне бы очень хотелось попробовать его во время развертывания и без необходимости точно тестировать приложение. Есть идеи?

ответ

0

Оба хорошие ответы, проблема была в развертывании. Web.config был настроен для IIS6, а развертывание в IIS7 неправильно настроило открытый сеанс в представлении HttpModule, который используется для фиксации транзакции. Изменение режима трубопровода от Integrated to Classic решило проблему.

1

Оставьте свое текущее развертывание и вернитесь к тому, что у вас было до этого. Затем найдите ошибку, которую сделали кто-то. Если он использовался для вставки, а теперь нет, то что-то не так с вашим текущим кодом. Если он не создает статусы вставки/обновления, я сначала посмотрю, где они должны быть созданы. Было ли текущее деление фактически вставить запись или обновить их в dev? Испытывал ли кто-нибудь это, или вы полагались на то, что он не вызвал ошибку? Если он работает в dev и не работает в prod, я бы посмотрел на различия между dev и prod.

2

Мое предположение заключается в том, что по умолчанию ISUSE FlushMode был изменен с Auto на Never или Commit. Никогда не означает, что сеанс будет очищаться при вызове Flush() приложением; Commit означает, что сеанс будет очищаться при совершении транзакции.

Смежные вопросы