2013-02-12 30 views
0

我觀察到,當我將實體添加到另一個實體的集合時,不會調用第二個實體的驗證程序。實體級別驗證程序未觸發

我期望在調用savechanges時添加到子集合觸發父級實體級別驗證。

我現在不能寫測試,但如果需要的話,我會在今天下午寫。

這是預期的行爲還是錯誤?

entity.OrderLine().arrayChanged.subscribe(function (args) { 
     console.log(args); 
     if (args.added && args.added.some(function (element) { 
      console.log(element.entityAspect.entityState.name); 
      return !(element.entityAspect.entityState.isUnchanged() 
       || element.entityAspect.entityState.isDeleted()); 
     })) { 
      console.log("modifico"); 
      entity.entityAspect.setModified(); 
     } 
     if (args.removed && args.removed.some(function (element) { 
      console.log(element.entityAspect.entityState.name); 
      return !element.entityAspect.entityState.isAdded(); 
     })) { 
      console.log("modifico"); 
      entity.entityAspect.setModified(); 
     } 
    }); 

回答

1

通過添加子項不會自動更改父項,因爲父項的數據屬性沒有更改。這是技術原因。

有時(通常?)模型語義說父由任何添加/刪除/更改爲一個孩子改變。這並不總是正確的,這就是爲什麼Breeze不會自動傳播變化的原因。但通常情況是這樣的......我認爲如果您在元數據中將此指定爲期望的行爲,Breeze將爲您提供支持。你並不孤單。我已添加a User Voice suggestion for this idea;如果它對你有影響,請投票支持(並添加你的評論)。

同時,在entity initializer中,您可以訂閱父集合中的更改以及該集合的項目,並讓它們將父項設置爲「修改」狀態(parent.entityAspect.setModified())。這恐怕現在不得不做。

+0

好的,謝謝。我將我的投票添加到用戶語音提示。同時我會採取解決方法。 – 2013-02-12 16:20:50

+0

你好,只有一個問題:在父實體中,我正在從子集合中訂閱arrayChanged事件:entity.OrderLine()。arrayChanged.subscribe(...);我注意到,如果刪除訂單行並調用rejectChanges,則在args變量的添加數組內部,訂單行的entityState將被刪除。我預計它是未經修改的。 ¿這是正確的行爲?我已更新了該問題以向您顯示訂閱。 – 2013-02-13 18:43:56

+0

它應該是未修改的並且已被恢復到陣列。我以爲我看到了這種情況的測試。也許我在做夢。你是否有一個?謝謝。 – Ward 2013-02-14 06:00:08