Breeze EntityManager.saveChanges(不使用.Net时)返回的数据的适当格式是什么?

Breeze EntityManager.saveChanges(不使用.Net时)返回的数据的适当格式是什么?,breeze,Breeze,我正在开发一个应用程序的服务器端,它在前端使用BreezeJS来管理模型交互。服务器端平台是ColdFusion,它没有内置的EF或OData支持,因此我正在编写服务器接口来生成/使用默认webapi适配器使用的元数据 目前,我正在使用BreezeJS下载的示例AngularJS ToDo应用程序进行原型设计。到目前为止,我能够获取元数据,查询模型,甚至将更改保存到服务器(使用示例应用程序的js代码),但是当触发EntityManager.saveChanges()方法时,我会出现以下错误: 未

我正在开发一个应用程序的服务器端,它在前端使用BreezeJS来管理模型交互。服务器端平台是ColdFusion,它没有内置的EF或OData支持,因此我正在编写服务器接口来生成/使用默认webapi适配器使用的元数据

目前,我正在使用BreezeJS下载的示例AngularJS ToDo应用程序进行原型设计。到目前为止,我能够获取元数据,查询模型,甚至将更改保存到服务器(使用示例应用程序的js代码),但是当触发EntityManager.saveChanges()方法时,我会出现以下错误:

未捕获类型错误:无法读取null的属性“Errors”
ctor.prototype.saveChanges
方法中的ajax帖子的“success”方法期间,在breeze.debug.js文件中。显然,服务器需要在保存后返回一些数据。那么,需要从服务器返回的数据是什么?如果以与发布相同的格式返回保存的实体,则会出现以下错误:

未捕获类型错误:无法调用未定义的方法“map”

调用方法时,breeze.debug.js文件中出现错误:
ctor.prototype.\u prepareSaveResult


我肯定遗漏了一些解释这一点的文档,因此如果您能为我指出正确的方向,那也太好了。

保存结果是一个具有三个属性的对象

  • 实体:发送到服务器的实体数组,其值由服务器更新。例如,临时ID值将被服务器生成的ID替换
  • KeyMappings:一组对象,告诉Breeze哪些临时ID被哪个服务器生成的ID替换。每个对象都有一个
    EntityTypeName
    TempValue
    RealValue
  • 错误:一组
    EntityError
    对象,表示在服务器上发现的验证错误。如果没有错误,该值将为空。每个对象都有一个
    ErrorName
    EntityTypeName
    KeyValues
    数组、
    PropertyName
    ErrorMessage
保存结果中的所有属性名称都区分大小写

下面是保存单个订单对象时保存结果的示例。请注意,订单包含一个
$type
属性,因此Breeze可以将其与其客户端元数据进行匹配。还要注意,KeyMappings显示订单的临时键-1被服务器生成的值262013替换

{
"Entities":[
    {"$type":"northwind.model.Order","customerID":"7852","orderID":262013,"rowVersion":0}],
"Errors":null,
"KeyMappings":[
    {"EntityTypeName":"northwind.model.Order","RealValue":262013,"TempValue":-1}]
}

感谢您为Breeze构建了自己的服务器后端。

感谢您出色的回答@Steve!我现在离你更近了:)。不幸的是,本机ColdFusion JSON序列化程序不处理空值(将它们视为字符串),当我根据您的示例返回结构时,出现
“Errors”:“null”
它尝试运行错误处理程序,但失败地说
对象没有方法“map”
。传递空数组不会出错,但会导致失败回调运行。我可以编写自己的序列化程序,但如果可以避免的话,我宁愿这样做。在这方面有什么建议吗?您可以完全保留
Errors
属性-要成功保存,只需要实体和键映射。如有必要,创建两种不同类型的对象,一种具有Errors属性,另一种不具有Errors属性。太棒了!谢谢你的帮助,史蒂夫。通过在没有错误时删除
错误
数组,我完全可以操作(就Todo示例而言)!