使用事件侦听器时,NHibernate不更新父对象的表

时间:2011-10-14 17:21:55

标签: c# fluent-nhibernate

我正在尝试在使用NHibernate事件侦听器插入或更新审计字段之前将其添加到我的域对象中。利用IPreInsertIPreUpdate事件侦听器接口,我可以在所有域对象上设置审计字段,但具有存储在父对象表中的审计字段的域对象除外。例如,这是我的实体类:

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);
}

以下是表格的定义方式:

人员表:

  • 编号
  • 名称

实体表:

  • 编号
  • EntityTypeId
  • UpdateUser两个
  • UpdateDate

因此,在此设置下,IPreInsert事件侦听器工作正常,将新人插入人员表并使用Entity将新Entity插入UpdateUser表和UpdateDate正确填充。但是,如果我在何处更新此人的姓名,IPreUpdate事件侦听器将触发并更改对象上的UpdateDate字段,但永远不会执行实体表的更新。从这个页面获取建议,

http://nhforge.org/wikis/howtonh/changing-values-in-nhibernate-events.aspx

我尝试使用IFlushEntityISaveOrUpdate事件侦听器都没有效果。

0 个答案:

没有答案