在更新nhibernate之前更改一个属性的值

Fer*_*ndo 2 nhibernate events listener

我正在尝试更改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;
    }
Run Code Online (Sandbox Code Playgroud)

和配置configuration.EventListeners.PreUpdateEventListeners = new IPreUpdateEventListener [1] {new AuditListener()};

很多!

Jam*_*acs 5

您应该更新@ event.State,而不是@ event.Entity.@ event.State包含要在更新中使用的数据.您可能还想更新@ event.Entity以保持一致,但是当OnPreUpdate触发时,实体的数据已经被读入状态.您可以在@ event.OldState中找到数据库中存在的先前状态.