如何在NHibernate事件OnFlushEntity中加载旧状态对象

本文关键字:加载 状态 对象 OnFlushEntity NHibernate 事件 | 更新日期: 2023-09-27 18:29:31

我有一个名为的类

public class AuditFlushEntityEventListener : DefaultFlushEntityEventListener 

此类覆盖OnFlushEntity。所以我有一个FlushEntityEvent。我想知道如何在更新过程中恢复旧的状态对象。

到目前为止,我只有我的@event.Entity(我的域的对象)和@event.EntityEntry.LoadedState 中的对象列表

*Nhibernate 3.0,我正在处理事件导致的问题,而使用FlushEntity导致的问题。

如何在NHibernate事件OnFlushEntity中加载旧状态对象

@event.LoadedState包含数组中以前的值,@event.PropertyValues包含当前值。相应的persister.PropertyNames包含相同顺序的属性名称,persister.PropertyTypes包含NH类型。

示例:

for (int i = 0; i < @event.PropertyValues.Length; i++)
{
  Console.WriteLine("Property {0} : {1} => {2}",
    @event.EntityEntry.Persister.PropertyNames[i],
    @event.LoadedState[i],
    @event.PropertyValues[i]);
}

我不确定"LoadedState"是否真的是已经加载的状态。它可能是数据库中的状态,每次刷新都可能发生变化。检查一下。可能需要采取从事件中获得的"第一个加载状态"。

注:我写了一个"自动审计跟踪编写器"。对于复杂的实体,它会变得非常复杂。最复杂的是对象的嵌套(父-子)。事件发生在NH深处。您需要处理组件和集合。