Breeze EF6 SaveChanges doesn't propagate exceptions
在 EFContextProvider (EF6) SaveChangesCore 方法中,异常处理如下所示:
1 2 3 4 5 6 | } catch (Exception e) { while (e.InnerException != null) { e = e.InnerException; } throw e; } |
这只会抛出最内部的异常,并隐藏外部异常所揭示的相关信息。
当 SaveChanges 过程经过多个层时,下一个直接层异常丢失,仅抛出链中的最后一个异常。它不允许很好地处理调用者的异常。
更新后的帖子
从 Breeze 1.4.6 开始,服务器上抛出的任何 .NET 异常现在都可以在任何异步微风结果的 httpResponse.data 属性中以其原始形式提供。 Breeze 仍会向下钻取以提取"良好"错误消息,但不会再掩盖最初的异常。
下面是原帖-------------------
这是一个有趣的观点。我们这样做的原因是因为大多数客户端应用程序都不是为了在异常链中导航而编写的,我们希望向客户端公开最"相关"的错误。我们查看的大多数应用程序都直接暴露了客户端"error.message"属性,并且在出现 EF 错误时这几乎总是无用的。
但是,您的观点是正确的。我认为我们需要做的是创建一个新的异常,它有一个顶级消息,它是最里面的异常消息,但仍然为那些想要钻取的人公开整个异常链。我为此添加了一个内部功能请求,并将尝试将其放入近期版本中(可能不是下一个版本,因为我们已经在测试那个版本)。
感谢您的意见。