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?
}