2013-04-11 81 views
0

我對標準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 

如果我斷點到CreateEntityInfoFromJsonBreeze.WebApi.ContextProvider類,我看到調用jsonSerializer.Deserialize(new JTokenReader(jo), entityType)entityInfo.Entity設置爲空的實體對象。在反序列化過程中沒有提出任何錯誤,所以我不能說出爲什麼會發生這種情況。

任何人都可以指出我可能的解決方案嗎?

感謝, 理查德

回答

3

好吧,我想通了這一點,這是我的一個愚蠢的錯誤。我在服務器上的實體類型已被內部設置者聲明,如public decimal QtyReceived { get; **internal** set; }。這意味着JSON解串器無法設置屬性值。有趣的是,這個錯誤僅僅被去除劑忽略了。

更改安裝人員公開修復此問題。

+0

感謝您回覆。這一個會殺了我試圖repro它:) – 2013-04-11 22:47:41