如何为更新和保存配置NHIbernate事件侦听器
本文关键字:配置 NHIbernate 事件 侦听器 保存 更新 | 更新日期: 2023-09-27 18:20:34
继我之前的问题之后,如何在NHibernate实体中实现LastUpdate?。
我在数据库中的已审核表上有两列:
-
created datetime default getdate() not null
(此行的创建日期) -
lastUpdate datetime null
(该行上次更新的日期时间)
我想在NHibernate中为只更新创建一个监听器,因为数据库引擎使用默认约束来处理新记录。我试图用以下代码创建一个自定义侦听器:
public class CustomUpdateEventListener : DefaultSaveOrUpdateEventListener
{
protected override object PerformSaveOrUpdate(SaveOrUpdateEvent evt)
{
var entity = evt.Entity as IAuditableEntity;
if (entity != null)
{
ProcessEntityBeforeUpdate(entity);
}
return base.PerformSaveOrUpdate(evt);
}
internal virtual void ProcessEntityBeforeUpdate(IAuditableEntity entity)
{
entity.UpdateDate = DateTime.Now;
}
}
它对更新非常有效,但它也会为Save
事件运行(当我向数据库添加新行时)。我不希望它因为新的争吵而被解雇。我试图将代码更改为只侦听Update
事件,但无法实现。
我试图将类更改为从DefaultUpdateEventListener
继承,但没有UpdateEvent
(只有SaveOrUpdate
事件或PreUpdate
或PostUpdate
)
我想知道我是否应该使用PreUpdate
事件并使我的侦听器从DefaultUpdateEventListener
继承,但我不确定我需要重写哪个方法。没有可重写的Update
方法。
您可以让您的类实现IPreUpdateEventListener接口(及其OnPreUpdate方法)。然后通过config:将您的类添加到会话事件列表器中
NHibernate.Cfg.Configuration cfg = new NHibernate.Cfg.Configuration();
cfg.EventListeners.PreUpdateEventListeners =
new IPreUpdateEventListener[] {new YourEventListener()};
sessionFactory = cfg.BuildSessionFactory();
似乎存在可以从DefaultSaveOrUpdateEventListener
类覆盖的PerformUpdate事件
protected override void PerformUpdate(NHibernate.Event.SaveOrUpdateEvent @event, object entity, NHibernate.Persister.Entity.IEntityPersister persister)
{
base.PerformUpdate(@event, entity, persister);
}