3

我对审计有非常特殊的需求。

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

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

仅当 Orders 属性不为空时,才应审核 Client 实体。

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

4

1 回答 1

3

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

在您的子类中,您可以覆盖OnPostDeleteOnPostInsertOnPostRecreateCollectionOnPostUpdate和。在您的情况下,您可能应该检查and 。如果你想审计,只需调用基本方法,如果你不想审计,在你的实现中什么都不做。OnPreRemoveCollectionOnPreUpdateCollectionevt.Entityevt.AffectedOwnerOrNull

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

于 2015-04-23T08:55:37.273 回答