我正在尝试在使用NHibernate事件侦听器插入或更新审计字段之前将其添加到我的域对象中。利用IPreInsert
和IPreUpdate
事件侦听器接口,我可以在所有域对象上设置审计字段,但具有存储在父对象表中的审计字段的域对象除外。例如,这是我的实体类:
public class Person : Entity
{
public string name {get; set;}
}
public class Entity : PersistentEntity
{
public int EntityTypeId {get; set;}
}
public abstract class PersistentEntity
{
public virtual Guid Id { get; set;}
public virtual Guid UpdateUser {get; set;}
public virtual DateTime UpdateDate {get; set;}
}
以下是我的映射:
public class PersonMap : SubclassMap<Person>
{
Map(x => x.Name);
}
public class EntityMap : PersistentEntityMap<Entity>
{
Map(x => x.EntityTypeId);
}
public abstract class PersistentEntityMap<T> : ClassMap<T> where T : PersistentEntityMap
{
Id(x => x.Id).GeneratedBy.GuidComb();
Map(x => x.UpdateUser);
Map(x => x.UpdateDate);
}
以下是表格的定义方式:
人员表:
实体表:
因此,在此设置下,IPreInsert
事件侦听器工作正常,将新人插入人员表并使用Entity
将新Entity
插入UpdateUser
表和UpdateDate
正确填充。但是,如果我在何处更新此人的姓名,IPreUpdate
事件侦听器将触发并更改对象上的UpdateDate
字段,但永远不会执行实体表的更新。从这个页面获取建议,
http://nhforge.org/wikis/howtonh/changing-values-in-nhibernate-events.aspx
我尝试使用IFlushEntity
和ISaveOrUpdate
事件侦听器都没有效果。