【问题标题】:Change value of a propery before update nhibernate在更新休眠之前更改属性的值
【发布时间】:2023-03-28 13:32:02
【问题描述】:

我正在尝试更改 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() };

非常感谢!

【问题讨论】:

    标签: nhibernate events listener


    【解决方案1】:

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

    【讨论】:

    • 非常感谢!我找到了一个完全改变@event.State 的例子,而不是@event.Entity。
    • +1:在这种情况下,您确实应该同时更新 BOTH,尤其是当您使用二级缓存等时。
    • @DanP - 我同意。在这种情况下,两者都应该更新,但重要的是 @event.State 以便看到这些更改持续存在。
    猜你喜欢
    • 2014-10-11
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 2019-02-03
    • 1970-01-01
    • 2012-04-24
    • 2013-10-19
    • 1970-01-01
    相关资源
    最近更新 更多