NHibernate PreUpdateEvent将Veto发送回用户界面

时间:2011-03-03 19:40:23

标签: nhibernate

背景

尝试从使用拦截器切换到事件。

我有一个覆盖OnFlushDirty和OnSave的ValidationInterceptor并运行我的自定义验证逻辑。如果实体有验证错误,则抛出异常,返回UI。

我实现IPreUpdate和IPreInsert EventListeners的新ValidationHandler执行相同的验证逻辑,但返回“true”以指示NHibernate否决操作。哪个确实有效,但用户界面并不知道否决权已经发生。

问题

UI如何知道在PreInsert或PreUpdate事件期间发生了否决?

我试图从这些事件中抛出一个异常,但是有了允许保存发生的效果,并且异常没有使它返回到UI。

UI指向成功保存的所有信息:

  • 已设置实体的ID。
  • 检查会话IsDirty()为false。
  • 在保存尝试期间没有例外。

1 个答案:

答案 0 :(得分:0)

哦,我很蠢。

让我提出我的证明代码:

public bool OnPreInsert(PreInsertEvent @event)
{
  try
  {
    var entity = @event.Entity as Api.IValidatable;
    if (entity == false)
      return false;

    if (entity.HasErrors())
      throw new ObjectIsInvalidException(entity.ValidationErrorMessage());

    return false;
  }
  catch (Exception ex)
  {
    log.Error("Unable to perform PreInsert validation on entity", ex);
  }
}

是的,在它从方法中消失之前,这个例外被吞没了。

更改为重新抛出异常,一切正常。