2013-04-10 84 views
1

場景:創建微風實體包括使用manager.createEntity navigationproperties拋出異常

我使用的微風在我們的SPA和原始的HTTP方法POST查詢PUT DELETE方法。 資源上的POST方法返回創建的資源,包括其創建的子對象。

我想將創建的資源附加到beeze實體管理器。

我嘗試添加使用

manager.createEntity('Driver', data, breeze.EntityState.Unchanged); 

其中數據對象包含驅動程序資源和相關的子實體數組的實體。

但是得到一個例外:「可能無法設置集合導航屬性。」

我是否必須手動創建本地實體並附加子實體,或者輕而易舉地支持這種情況?

回答

1

此例外的原因是'createEntity'方法創建實體,然後爲其分配'數據',但對於任何集合導航屬性,集合已經存在,Breeze將不允許您替換它。這是對現有實體的故意選擇,其中應用程序的其他部分可能會引用該集合,但在這種情況下,如果您是第一個訪問該集合,這種情況會過度。目前,解決方法是更新任何導航集合,而不是替換它們。

因此,要做到這一點最簡單的方法是調用createEntity方法沒有任何收集數據的屬性,然後將數據推送到您的收藏

var driver = manager.createEntity('Driver', dataWithoutCollections, EntityState.Unchanged) 
// then update collection properties by pushing into them. 
trafficFines.forEach(function(trafficFine) { 
    driver.trafficFines.push(trafficFine);  // or use push.apply 
}; 

注意添加到實體的集合屬性不會導致EntityState改變,這應該是足夠的。

基於這個問題,我將添加一個功能請求,以在您調用'createEntity'方法的情況下抑制此異常,因爲不存在應用程序的其他部分已經有權訪問新的實體。

+0

+1爲流量罰款 – Rik 2013-04-11 11:09:57