我非常需要审核。
考虑以下类(为了简单起见,我更改了类的名称并修剪了不必要的代码)
[Audited]
public class Client
{
[NotAudited]
public virtual IList<Order> Orders {get; set;}
}
只有在Orders属性不为空时才应审核客户端实体。
那可能吗?如果是这样,我该怎么做?
答案 0 :(得分:3)
如果要根据某些状态在运行时关闭审核,可以创建自己的AuditEventListener
自定义子类,并将该类型的实例传递给IntegrateWithEnvers
方法。
在您的子类中,您可以覆盖OnPostDelete
,OnPostInsert
,OnPostRecreateCollection
,OnPostUpdate
,OnPreRemoveCollection
和OnPreUpdateCollection
。在您的情况下,您应该检查evt.Entity
和evt.AffectedOwnerOrNull
。如果您想进行审计,只需调用基本方法,如果您不想在审计中执行任何操作。
但请注意,如果您只是使用Envers进行简单日志记录,那么您可能应该这样做。如果您使用它来重新创建历史实例,则“删除”某些历史事件的审核可能会在加载历史实例时导致问题。如果是这种情况,那么只有当一个实体在其生命周期内有或没有Orders
时才能安全地执行此操作。