【发布时间】:2010-11-19 08:19:30
【问题描述】:
我决定在最新版本的 NHibernate 中实现事件侦听器,以跟踪谁在进行编辑以及这些编辑是什么。我的问题是这个 - 下面确实有效,我可以逐步完成,但我不确定这些更改是如何保存的......我是否需要构建一个审计表并为其编写一个映射来调用保存或什么方法最好是通过“更新者”和“更新日期”信息来获取对象的状态,以便我可以在以后为某人提供此信息。
我认为基类提供了这个(或这个功能的一个子集),但我似乎找不到关于我在这里缺少的东西的好的博客文章。任何帮助将不胜感激!
Imports NHibernate.Event
Imports NHibernate.Event.Default
Public Class CustomSaveEventListener
Inherits DefaultSaveEventListener
Protected Overloads Overrides Function PerformSaveOrUpdate(ByVal evt As SaveOrUpdateEvent) As Object
Dim entity As IEntity = TryCast(evt.Entity, IEntity)
If entity IsNot Nothing Then
ProcessEntityBeforeInsert(entity)
End If
Return MyBase.PerformSaveOrUpdate(evt)
End Function
Friend Overridable Sub ProcessEntityBeforeInsert(ByVal entity As IEntity)
Dim user As User = DirectCast(Thread.CurrentPrincipal, User)
entity.ModifiedBy = user.UserName
entity.ModifiedDate = DateTime.Now
End Sub
End Class
当我打开 Reflector 时,我看到了这个基类方法的以下内容 - 但它到底在做什么?
protected override object PerformSaveOrUpdate(SaveOrUpdateEvent @event)
{
EntityEntry entry = @event.Session.PersistenceContext.GetEntry(@event.Entity);
if ((entry != null) && (entry.Status != Status.Deleted))
{
return this.EntityIsPersistent(@event);
}
return this.EntityIsTransient(@event);
}
【问题讨论】:
标签: nhibernate persistence event-listener