當你發現時,originalValuesMap
的性質指導微風服務器的ContextProvider
,因爲它準備的保存請求。這在ContextProvider topic中有記錄。
在您的示例中,您在更改屬性後調用setModified
。所做的只是改變EntityState
;它不會在客戶實體的entityAspect.originalValuesMap
...中創建條目,因此發送到服務器的originalValuesMap
爲空。
我有點驚訝,EFContextProvider.SaveChanges
準備了整個實體的EF更新。我本來會猜測它只是一起忽略了實體。我正在做一個精神筆記來調查一下自己。不是說行爲是「正確的」或「錯誤的」。
您不必操縱originalValuesMap
即可實現您的目標。只需改變序列。試試這個:
var foo = manager.createEntity('Foo', {
id = targetId
}, breeze.EntityState.Unchanged); // create as if freshly queried
foo.bar = 'new value'; // also sets 'originalValues' and changes the EntityState
manager.saveChanges(); // etc.
讓我們知道這是否有竅門。
Breeze(在客戶端)不生成SQL;這是在服務器上完成的。你使用哪些服務器技術? – 2015-03-02 21:45:32
.net Web API和EF6與SQL Server – mwill 2015-03-02 22:20:10
我想出了一個解決方案,但想知道如果是支持。我知道SQL是在EF中生成的,但是需要告訴EF要生成什麼,這是微風進入的地方。查看JSON似乎是,如果屬性位於originalValuesMap中,那麼它將包含在SQL中更新聲明。如果沒有地圖,那麼整個實體將被更新。所以在我上面的示例中,在完成所有步驟之後,我還設置了原始值:obj.entityAspect.originalValues.myProperty = 0; (myProperty是一個數字)。這正確地更新了該列。 – mwill 2015-03-03 14:45:03