NHibernate Envers:基于属性值的审计实体

时间:2015-04-20 14:34:16

标签: c# auditing nhibernate-envers

我非常需要审核。

考虑以下类(为了简单起见,我更改了类的名称并修剪了不必要的代码)

[Audited]
public class Client
{
  [NotAudited]
  public virtual IList<Order> Orders {get; set;}
}

只有在Orders属性不为空时才应审核客户端实体。

那可能吗?如果是这样,我该怎么做?

1 个答案:

答案 0 :(得分:3)

如果要根据某些状态在运行时关闭审核,可以创建自己的AuditEventListener自定义子类,并将该类型的实例传递给IntegrateWithEnvers方法。

在您的子类中,您可以覆盖OnPostDeleteOnPostInsertOnPostRecreateCollectionOnPostUpdateOnPreRemoveCollectionOnPreUpdateCollection。在您的情况下,您应该检查evt.Entityevt.AffectedOwnerOrNull。如果您想进行审计,只需调用基本方法,如果您不想在审计中执行任何操作。

但请注意,如果您只是使用Envers进行简单日志记录,那么您可能应该这样做。如果您使用它来重新创建历史实例,则“删除”某些历史事件的审核可能会在加载历史实例时导致问题。如果是这种情况,那么只有当一个实体在其生命周期内有或没有Orders时才能安全地执行此操作。