对于OptimisticConcurrencyException,未定义Breezejs SaveChanges error.detail

时间:2014-07-17 15:25:38

标签: asp.net-web-api breeze

如下图所示,在并发异常上,saveChanges失败函数在错误对象中没有给出详细支柱。

搜索后,发现我需要在web config中将customerrors设置为off。但是在prod服务器或localhost中,没有可用的方法来获取详细信息。 当我深入了解错误道具时,我在内部异常的内部异常中发现了并发异常,但错误obj的详细属性仍未定义。

请告诉我遗漏的一点。

我正在使用带有vsap13的webapi2的mvc app

enter image description here

2 个答案:

答案 0 :(得分:0)

您是否可以确保所有实体的属性都已设置,尤其是Id或其他外键字段?

这听起来像是一个抛出的实体框架错误应该在你的屏幕截图中的httpResponse对象中,但更好的解决方案是调试服务器并查看导致它的原因。

您可以检查问题的保存有效负载,或在服务器上设置断点以进一步检查。

答案 1 :(得分:0)

老实说,我试图在saveChanges的saveError方法中测试以下代码。我尝试的只是在浏览器的不同选项卡中打开同一个实体并删除它们。第二次删除实际上给了我服务器中的System.Exception在innerexception中有并发异常。但是细节道具是未定义的。

  var reason = error.message;
        var detail = error.detail;

        if (error.entityErrors) {
            reason = this.handleSaveValidationError(error);
        } else if (detail && detail.ExceptionType &&
            detail.ExceptionType.indexOf('OptimisticConcurrencyException') !== -1) {
            // Concurrency error 
            reason =
                "Another user, perhaps the server, " +
                "may have deleted one or all of the todos." +
                " You may have to restart the app.";
        } else {
            reason = "Failed to save changes: " + reason +
                " You may have to restart the app.";
        }

这是我在savechanges之后从服务器获得的响应

enter image description here