最简单的方法是为需要更新的属性创建一个接口:
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
没有状态,它可以作为单例存在而不必担心多线程问题。