最も簡単な方法は、更新する必要があるプロパティのインターフェイスを作成することです。
public interface IAudit
{
string ModifiedBy { get; set; }
DateTime ModifiedTime { get; set; }
}
次に、 を追加しNHibernateInterceptor
てプロパティを更新します。
public class AuditInterceptor : EmptyInterceptor
{
public override bool OnSave(object entity, object id, object[] state, string[] propertyNames, IType[] types)
{
var auditableEntity = entity as IAudit;
if (auditableEntity != null)
{
auditableEntity.ModifiedTime = DateTime.Now;
// ...
}
return base.OnSave(entity, id, state, propertyNames, types);
}
// ...
}
次に、NHibernate にインターセプターを使用するように指示する必要があります。正しく覚えていれば、次のように実行されます。
var session = SessionFactory.OpenSession(new AuditInterceptor());
セッションなどの管理方法に応じて、これがどこに行くかによって異なります。AuditInterceptor
状態がないため、マルチスレッドの問題を心配することなくシングルトンとして存在できます。