我正在针对标准 RPC 样式的 WebAPI 使用 Breeze。我用[BreezeController]
属性装饰了控制器。我已经在客户端为 WebAPI 操作返回的实体定义了实体元数据。我的微风数据服务设置如下:
var dataService = new breeze.DataService({
serviceName: "http://localhost/api/PartReceiptPurchaseOrders",
hasServerMetadata: false
});
SaveChanges
修改实体后调用EntityManager的方法时,EntityInfo
服务端的对象为空。似乎传递给 SaveChanges 方法的序列化实体未正确反序列化为服务器上的预期实体。我很难理解我做错了什么。
当我检查JObject saveBundle
传递给SaveChanges
WebAPI 控制器上的方法的参数时,我得到了预期的实体详细信息:
{
"entities": [{
"PurchaseOrderPartId": 1,
"PartNumber": "ABC",
"SupplierPartNumber": "12345",
"Description": "Some Part",
"Bin": "1",
"Qty": 24,
"QtyReceived": 24,
"QtyBackordered": 0,
"Cost": 60,
"Currency": "USD",
"PurchaseOrderId":1,
"entityAspect": {
"entityTypeName": "PurchaseOrderPart:#MyApp.Models",
"entityState": "Modified",
"originalValuesMap": {
"QtyReceived": 0
},
"autoGeneratedKey":{
"propertyName": "PurchaseOrderPartId",
"autoGeneratedKeyType": "Identity"
}
}
}],
"saveOptions": { "allowConcurrentSaves": false }
}
但是,在调用基类方法之后,Breeze.WebApi.ContextProvider.SaveChanges()
该entityInfo.Entity
属性包含一个空对象,如下所示:
entityInfo {Breeze.WebApi.EntityInfo}
AutoGeneratedKey: null {Breeze.WebApi.AutoGeneratedKey}
Entity {MyApp.Models.PurchaseOrderPart}
Bin: null
Cost: 0
Currency: null
Description: null
PartNumber: null
PurchaseOrder: null {MyApp.Models.PurchaseOrder}
PurchaseOrderId: 0
PurchaseOrderPartId: 0
Qty: 0
QtyBackordered: 0
QtyReceived: 0
SupplierPartNumber: null
CreateEntityInfoFromJson
如果我在类中设置断点Breeze.WebApi.ContextProvider
,我会看到调用jsonSerializer.Deserialize(new JTokenReader(jo), entityType)
设置entityInfo.Entity
为一个空实体对象。在反序列化过程中没有出现错误,所以我不知道为什么会这样。
谁能指出我可能的解决方案?
谢谢,理查德