Breeze在保存這些數據時沒有看到服務器端數據發生了什麼。微風團隊表示,你必須重新查詢更新的數據。可以考慮在保存期間同步完成的操作,如sql觸發器(expl。之後插入),因爲這些操作可以在保存過程中轉換實體,因此它們將在客戶端進行:這對於不是由Breeze生成的新鍵非常有用,如多部分鍵。我很難解決這個問題。幫幫我?breeze和sql server觸發器
更新1: 如果這是Breeze的原則,它可能是一個錯誤。
1)觸發(在服務器端)是所使用的實體(表的一部分)
2)框架:
- 服務器端框架:.NET框架4.5
- 客戶框架:微風1.3.5
- 視圖框架:敲除2.2.1
3)從調用SaveChanges結果情形:
function saveTousRecos() {
return manager.saveChanges()
.then(success)
.fail(fail);
function success(saveResult) {
/* do your post-save work here */
axi = saveResult.entities[0].jobtab();
// axi is an identity key generated at server and sent back to client by Breeze
// result : Breeze value = (195), the same as server-side (195)
ara = saveResult.entities[0].seqtab();
// ara is a property value inserted by sql FOR INSERT trigger,
// result : Breeze value = (NULL), server-side has (13)
logger.log("Saving succeded... ");
}
function fail(error) {
logger.log("Saving failed: " + error.message);
}
}
P.S. :除非您從服務器重新調用實體,而不是從緩存中重新調用實體,否則SQL觸發器插入的所有值都根本不可見;看起來像一個解決方案,而不是我想的解決方案。
更新2: 我認爲,微風認爲我回實體的OData喜歡。
從我的微風阿比controlleur 1)我用這個:
return _contextProvider.Context.clients.Where(uc => uc.refclie == rqnoclie);
2)微風說: 隨着的OData,服務器端計算字段的值的任何變化將不會在微風可用更新後。如果你需要刷新這些值,你必須重新查詢...
3)所以從現在開始,我的解決方案是REQUERY(不是好消息)來獲得我的計算結果或觸發結果。希望BeforeSaveEntity攔截器的未來將解決這個問題。或者我如何獲得Breeze的純實體(不是OData,而是計算或觸發的服務器端)?有沒有辦法擺脫這種麻煩?
@sbelini感謝您的幫助病房,但我認爲困難留下來。我更新了我的答案,試圖證明Breeze不會將sql觸發器的更新結果返回給客戶端。不知道這是否是一個錯誤。 –
我對重新查詢的評論是w/r/t Web API數據源,而不是OData數據源(關於我幾乎不知道的數據源)。我們將嘗試重現您所描述的內容並回報。 – Ward