NHibernate не будет вставлять запись - PullRequest
1 голос
/ 03 июня 2010

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

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 04 июня 2010

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

1 голос
/ 03 июня 2010

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

0 голосов
/ 05 июня 2010

Оба хороших ответа, проблема была в развертывании. Файл web.config был настроен для IIS6, а развертывание в IIS7 неправильно настроило открытый сеанс в представлении HttpModule, который используется для принятия транзакции. Изменение режима конвейера с Интегрированного на Классический решило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...