Измените значение свойства перед обновлением nhibernate - PullRequest
2 голосов
/ 03 ноября 2010

Я пытаюсь изменить значение свойства объекта в PreUpdateEventListener, но новое значение не сохраняется, сгенерированный sql содержит старое значение свойства.

Код очень прост:

        public bool OnPreUpdate(PreUpdateEvent @event)
    {
        var p = @event.Entity.GetType().GetProperty("audit_version");

        if (p != null && p.CanWrite && p.CanRead)
        {
            int val = (int)p.GetValue(@event.Entity, null);
            p.SetValue(@event.Entity, val + 1, null);
        }

        return false;
    }

и конфигурация configuration.EventListeners.PreUpdateEventListeners = new IPreUpdateEventListener [1] {new AuditListener ()};

Tks a Lot!

1 Ответ

5 голосов
/ 03 ноября 2010

Вы должны обновлять @ event.State, а не @ event.Entity.@ event.State содержит данные, которые будут использоваться в обновлении.Возможно, вы захотите обновить @ event.Entity, чтобы все было согласованно, но к моменту запуска OnPreUpdate данные объекта уже были прочитаны в State.Предыдущее состояние, как оно существует в базе данных, можно найти в @ event.OldState.

...