1

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

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

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

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

4

1 回答 1

2

更新帖子

从 Breeze 1.4.6 开始,服务器上抛出的任何 .NET 异常现在都可以在任何异步微风结果的httpResponse.data属性中以其原始形式提供。Breeze 仍会向下钻取以提取“良好”错误消息,但不会再掩盖最初的异常。

原帖如下--------------------

这是一个有趣的观点。我们这样做的原因是因为大多数客户端应用程序不是为了通过异常链导航而编写的,我们希望向客户端公开最“相关”的错误。我们查看的大多数应用程序只是直接暴露了客户端“error.message”属性,并且对于 EF 错误,这几乎总是无用的。

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

并感谢您的意见。

于 2013-11-21T20:02:02.960 回答