使用nhibernate审核日志到重复的表

vib*_*blo 2 c# nhibernate audit fluent-nhibernate

我们有一个Web应用程序,我们使用NHibernate作为ORM,现在我们需要在一些实体上添加审计来跟踪谁改变了什么.但是,我还没有设法找出处理它的最佳和最简单的方法.

如果可能的话,我希望审计信息进入每个实体的单独表,如下所示(伪sql):

create table MethodStatus (MethodId, Enabled)
create table MethodStatusAudit (MethodId, Enabled, AdminId, Date, ChangeType(U,D,I))
Run Code Online (Sandbox Code Playgroud)

问题是如何使用(Fluent)NHibernate设置它,以便它易于管理?

我最初的想法是使用IPreInsertEventListener/IPreUpdateEventListener/IPreDeleteEventListener并让我的可审计对象实现IAuditable接口,然后执行某些操作.但我无法弄清楚如何保存审计..

public interface IAuditable {}

public class MethodStatus : IAuditable
{
    public virtual int MethodId { get; set; }
    public virtual bool Enabled { get; set; }
}

public class MethodStatusMap : ClassMap<MethodStatus>
{
    public MethodStatusMap()
    {
        Id(x => x.MethodId);
        Map(x => x.Enabled);
    }
}

public bool OnPreInsert(PreInsertEvent @event)
{
    var e = @event.Entity as IAuditable;
    if (e != null)
        //save audit.. but how? 
}
Run Code Online (Sandbox Code Playgroud)

Rog*_*ger 6

NHibernate Envers可以帮助您.