(NHibernate)PerformSaveOrUpdate事件未正确保存

时间:2010-07-16 15:00:19

标签: c# nhibernate events fluent-nhibernate

我有一个自定义事件监听器(流利地)使用:

添加到我的配置中
.ExposeConfiguration(c => c.SetListener(ListenerType.SaveUpdate, listener))

我的监听器只是在保存或更新之前捕获并处理审计字段(CreatedBy,Modified By等)

protected override object PerformSaveOrUpdate(SaveOrUpdateEvent sender)
{
      var entity = sender.Entity as IEditableEntity;

      if (entity != null)
      {
         if (entity.IsNew())
            ProcessEntityBeforeInsert(entity);
         else
            ProcessEntityBeforeUpdate(entity);
      }

      return base.PerformSaveOrUpdate(sender);
}

'entity.IsNew()'是一种检查实体的Id是否为'>的方法。 0'并正确评估。但是'base.PerformSaveOrUpdate'正在尝试执行插入时它应该是一个更新并且作为Id传递null(它被映射为GeneratedBy.Identity())并且我得到以下异常:

"Cannot insert the value NULL into column 'Id', table '...'; column does not allow nulls. INSERT fails.\r\nThe statement has been terminated."

1 个答案:

答案 0 :(得分:1)

为此,您应该使用PreInsert和PreUpdate方法。

以下是一个完整的示例:http://ayende.com/Blog/archive/2009/04/29/nhibernate-ipreupdateeventlistener-amp-ipreinserteventlistener.aspx