在更新nhibernate之前更改属性的值
我试图更改PreUpdateEventListener中的实体属性值,但新值不会持久化,生成的sql包含该属性的旧值 代码非常简单:在更新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
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,以便看到这些更改持续存在。