在为breezeJs调用SaveChanges()时,WebApi未被捕获的错误

时间:2016-05-04 16:52:22

标签: entity-framework asp.net-web-api breeze

使用WebAPI和EntityFramework进行Breeze设置。

EntityManager查询工作正常。 SaveChanges()在所有实体上都正常工作,除了......

我有一个带有可选相关实体的实体:

Public Class Payment
    Public Property Id As Integer
    Public Overridable Property Registree As Registree
    Public Property RegistreeId as Integer?
    Public Property Amount as Double
End Class

这是我对SaveChanges()

的WebAPI操作
  <HttpPost()>
    Public Function SaveChanges(bundle As JObject) As SaveResult
        Dim result As SaveResult
        Try
            result = breezeDb.SaveChanges(bundle)
        Catch ex As Exception
            Dim err = ex
        End Try
        Return result
    End Function

当我在Breeze中创建一个新的付款实体并调用SaveChanges时,一切正常,除非我的付款实体具有RegistreeId的值。

如果RegistreeId有值,则会发生以下情况:

  1. 成功调用WebAPI上的SaveChanges()。
  2. 我的Try / Catch没有发现任何错误。
  3. 返回给客户的“结果”没有与之关联的错误。
  4. 但是,在客户端,manager.saveChanges()失败,给出一个没有详细信息的错误对象,只是“响应的HTTP状态代码为500。”

    return manager.saveChanges()
                  .then(function(saveResult){
                    return saveResult;
                  })
                  .catch(errorOnSave); //this gets called, no breakpoints get hit in the "then" function
    

    注意:实体IS正确保存到数据库,相关实体和所有。所以这不是外键约束或其他数据库问题。

    所以似乎服务器上出现了问题,并且没有错误消息传递给客户端。但是我的try / catch没有得到它,只有当可选的外键字段为非null时才会出现错误。

    有什么想法吗?

1 个答案:

答案 0 :(得分:1)

发现问题...没有意识到我没有关闭web.config中的自定义错误。

<system.web>
    <customErrors mode="Off" />
  ...
  </system.web>

然后我能够看到Json.Net在解析saveresult时遇到了null异常错误。