将事件添加到级联更新
本文关键字:级联 更新 添加 事件 | 更新日期: 2023-09-27 18:09:45
我在我的应用程序中使用流利的nhinnate级联所有选项。
我有一个复杂的模型,里面有一堆实体和关系。一切都由一个实体(契约)持有,它有一些其他实体的集合。这些实体有对其他实体/实体列表的引用。
当我想保存全部内容时,我只需这样做:
mySession.Save(myContract);
myTransaction.Commit()
工作良好,保存所有的实体感谢级联。
问题是,我需要设置属性ModifiedBy, ModifiedTime等更新。我该怎么做呢?
最简单的方法是为需要更新的属性创建一个接口:
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
没有状态,它可以作为一个单例存在,而不用担心多线程问题。