Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在更新nhibernate之前更改属性的值_Nhibernate_Events_Listener - Fatal编程技术网

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

在更新nhibernate之前更改属性的值,nhibernate,events,listener,Nhibernate,Events,Listener,我试图更改PreUpdateEventListener中的实体属性值,但新值不会持久化,生成的sql包含该属性的旧值 代码非常简单: public bool OnPreUpdate(PreUpdateEvent @event) { var p = @event.Entity.GetType().GetProperty("audit_version"); if (p != null && p.CanWrite &&a

我试图更改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()}


太多了

您应该更新@event.State,而不是@event.Entity@状态包含要在更新中使用的数据。您可能还需要更新@event.Entity以保持所有内容的一致性,但在OnPreUpdate触发时,该实体的数据已被读取到状态。您可以在@event.OldState中找到数据库中以前的状态。

非常感谢!我发现一个例子完全改变了@event.State,而不是@event.Entity。+1:在这种情况下,你真的应该同时更新这两个,特别是如果你使用二级缓存,等等@DanP-我同意。在这种情况下,两者都应该更新,但重要的是@event.State,以便看到这些更改持续存在。