尝试从使用拦截器切换到事件。
我有一个覆盖OnFlushDirty和OnSave的ValidationInterceptor并运行我的自定义验证逻辑。如果实体有验证错误,则抛出异常,返回UI。
我实现IPreUpdate和IPreInsert EventListeners的新ValidationHandler执行相同的验证逻辑,但返回“true”以指示NHibernate否决操作。哪个确实有效,但用户界面并不知道否决权已经发生。
UI如何知道在PreInsert或PreUpdate事件期间发生了否决?
我试图从这些事件中抛出一个异常,但是有了允许保存发生的效果,并且异常没有使它返回到UI。
UI指向成功保存的所有信息:
答案 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);
}
}
是的,在它从方法中消失之前,这个例外被吞没了。
更改为重新抛出异常,一切正常。