我们有一个使用 NHibernate 作为 ORM 的 Web 应用程序,现在我们需要对一些实体添加审计以跟踪谁更改了什么。但是,我还没有设法找出最好和最简单的方法来处理它。
如果可能的话,我希望审计信息进入每个实体的单独表中,如下所示(伪 sql):
create table MethodStatus (MethodId, Enabled)
create table MethodStatusAudit (MethodId, Enabled, AdminId, Date, ChangeType(U,D,I))
问题是如何使用 (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?
}