Breeze EF6 SaveChanges不会传播异常

时间:2013-11-13 19:12:01

标签: exception breeze entity-framework-6 savechanges

在EFContextProvider(EF6)SaveChangesCore方法中,异常处理如下所示:

} catch (Exception e) {
while (e.InnerException != null) {
e = e.InnerException;
}
throw e;
}

这只会抛出最内部的异常并隐藏外部异常所揭示的相关信息。

当SaveChanges进程经历多个层时,下一个直接层异常将丢失,并且仅抛出链中的最后一个异常。它不允许很好地处理调用者的异常。

1 个答案:

答案 0 :(得分:2)

更新帖子

从Breeze 1.4.6开始,服务器上抛出的任何.NET异常现在都以原始形式在任何异步微风结果的 httpResponse.data 属性中提供。微风仍然会向下挖掘以提取一个好的"错误消息,但不再模糊初始异常。

以下原帖:-------------------

这是一个有趣的观点。我们这样做的原因是因为大多数客户端应用程序都没有通过异常链进行导航,我们希望公开最相关的'给客户的错误。我们看到的大多数应用只暴露了客户端" error.message"属性直接和EF错误这几乎总是无用的。

但是,你的观点很好。我认为我们需要做的是创建一个新的Exception,它具有顶级消息,这是最内层的异常消息,但仍然为那些想要钻取的人公开整个异常链。我已为此添加了一个内部功能请求,并尝试将其发布到近期版本(可能不是下一个版本,因为我们已经在测试该版本)。

感谢您的投入。