Слушатели Nhibernate не работает правильно - PullRequest
1 голос
/ 26 января 2010

Я использую NHibernate (v 2.1.0.4000) и пытаюсь использовать прослушиватель событий для действия обновления.

Я использовал следующий код для добавления прослушивателя в конфигурацию Nhibernate.

var configuration = new Configuration();    
configuration.SetListener(ListenerType.Update, new UpdateListener());  
_sessionFactory = configuration.BuildSessionFactory();

Когда я обновляю два элемента, первый элемент не попадает в функцию «PerformUpdate» слушателя. Однако при обновлении второго элемента вызывается функция.

Как это может произойти?

--- Edited ---

Во время отладки я обнаружил, что в «OnSaveOrUpdate» Слушателя выполняется следующий код:

object obj4 = session.PersistenceContext.UnproxyAndReassociate(@event.Entity);
@event.Entity = obj4;
@event.Entry = session.PersistenceContext.GetEntry(obj4);

Я ожидал, что @ event.Entry был нулевым, но он не был нулевым и имел статус Loaded. Что в действительности должно происходить при вызове метода GetEntry?

1 Ответ

0 голосов
/ 26 января 2010

Можете ли вы показать код для вашего слушателя? Вы использовали профилировщик, чтобы убедиться, что обновления выпускаются для обоих элементов? Я вижу, как это происходит, если в элементе нет изменений, поэтому обновление не производится.

Отредактировано, чтобы добавить: я думаю, что вы используете более старую реализацию Listener. Я предлагаю использовать новый стиль (есть также ISaveOrUpdateEventListener). Реализуете ли вы функцию аудита?

Я также предлагаю вам проверить, выпущено ли обновление для первого элемента. Я знаю, вы сказали, что уверены, что это было изменено, но вы также должны проверить, что NH думает, что это было изменено Всегда полезно устранить очевидные проблемы при отладке чего-либо подобного.

...