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

时间:2012-03-29 19:24:25

标签: c# nhibernate events

我有一个名为

的班级
public class AuditFlushEntityEventListener : DefaultFlushEntityEventListener 

此类覆盖OnFlushEntity。所以我有FlushEntityEvent。 我想知道如何在更新期间恢复旧的状态对象。

到目前为止,我只有@event.Entity(我的域名对象),以及@event.EntityEntry.LoadedState

中的对象列表

* Nhibernate 3.0,我正在处理事件原因this并使用FlushEntity导致this

1 个答案:

答案 0 :(得分:1)

@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”是否实际上是已加载的状态。它可能是DB中的状态,可能随着每次刷新而改变。检查一下。可能需要采取从事件中获得的“第一次加载状态”。

注意:我写了一篇“自动审计跟踪作家”。对于复杂的实体,它变得非常复杂。最复杂的是对象的嵌套(父 - 子)。该活动位于NH的深处。您需要处理组件和集合。