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