2010-01-26 2 views
1

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

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

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

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

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

--- Отредактированный ---

При отладке я узнал, что на "OnSaveOrUpdate" слушателем, следующий код выполняется:

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

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

ответ

0

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

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

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

+0

Единственная функция, я имею в приемнике заключается в следующем: защищен переопределения недействительным PerformUpdate (SaveOrUpdateEvent @event, объект сущности, IEntityPersister стойкая бактерия) { Это Funtion это не называется. Я уверен, что оба объекта изменены. – Jan

+0

Я узнал, что когда я получаю объект, делаю изменения и обновляю объект, функция executeUpdate в слушателе никогда не вызывается. – Jan

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