我對標準RPC樣式的WebAPI使用Breeze。我用[BreezeController]
屬性裝飾了控制器。我已經在客戶端上爲WebAPI操作返回的實體定義了實體元數據。我的微風DataService是否設置如下:Breeze在保存更改時不反序列化實體更改集
var dataService = new breeze.DataService({
serviceName: "http://localhost/api/PartReceiptPurchaseOrders",
hasServerMetadata: false
});
當調用EntityManager的修改後的實體法SaveChanges
,服務器上的EntityInfo
對象爲空。看來傳遞給SaveChanges方法的序列化實體沒有正確地反序列化到服務器上的預期實體中。我很難理解我做錯了什麼。
當我檢查JObject saveBundle
參數傳遞到的WebAPI控制器上的SaveChanges
方法,我得到預期的實體詳情:
{
"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
設置爲空的實體對象。在反序列化過程中沒有提出任何錯誤,所以我不能說出爲什麼會發生這種情況。
任何人都可以指出我可能的解決方案嗎?
感謝, 理查德
感謝您回覆。這一個會殺了我試圖repro它:) – 2013-04-11 22:47:41