Прослушиватель событий NHibernate PreUpdate не сохраняет изменения - PullRequest
4 голосов
/ 08 декабря 2010

У нас есть следующий прослушиватель событий PreUpdate:

public bool OnPreUpdate(PreUpdateEvent @event)
        {
            BaseBO entity = @event.Entity as BaseBO;
            if (entity == null)
                return false;

            var operatorName = "OpName";
            var utcDateTime = DateTime.Now.ToUniversalTime();

            Set(@event.Persister, @event.State, "ModifiedBy", "Fred & Barney");
            Set(@event.Persister, @event.State, "ModifiedDate", utcDateTime);

            entity.ModifiedBy = "fred & barney";
            entity.ModifiedDate = utcDateTime;

            return false;
        }

private void Set(IEntityPersister persister, object[] state, string propertyName, object value)
        {
            var index = Array.IndexOf(persister.PropertyNames, propertyName);
            if (index == -1)
                return;
            state[index] = value;
        }

Точки останова в операторе возврата указывают, что старые / новые значения состояния и свойства объекта были обновлены до ожидаемых значений.

Однако запущенный Sql profiler показывает, что значения ModifiedDate / ModifiedBy не обновляются.

Если я обновлю постоянный код и установлю ModifiedDate вручную, Profiler покажет, что ModifiedDate обновляется.

Файл сопоставления для большинства наших организаций:

<property name="ModifiedDate" insert="false" />

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

1 Ответ

4 голосов
/ 08 декабря 2010

Есть ли у вас динамическое обновление в ваших таблицах?В NHibernate есть «ошибка», которая не позволяет PreUpdate и PreInsert работать с динамическим обновлением.См. http://www.mail-archive.com/nhusers@googlegroups.com/msg13624.html

...