2013-10-02 50 views
0

具有高速緩存的實體,該實體已的前20名。 現在,用戶動作可以更新服務器上的排名前20位的形式相關的實體,我這樣想重新下載整個實體。服務器發送正確的數據與前20名,但在微風,我結束了前40名......我不知道如何避免這種行爲。微風:如何防止合併發生

謝謝你的提示

更新:我不使用的OData的WebAPI和IQueryable的,因爲它提供了太多的權力,以客戶爲我的應用程序。所以我不想使用EntityQuery.fromEntityKey,這似乎是我想要的。我寧願繼續使用「正常」查詢,我添加了一個參數。

更新2:爲了更加清晰地說明爲什麼我想要防止合併,當我重新計算前20位時,我刪除數據庫中的所有相關條目並重新創建它們,以便它們具有新的Id。所以我現在正在考慮更新,這可能實際上解決了我的問題,但是我仍然想知道是否可以防止合併。

回答

0

我不確定什麼是你的問題,但是如果你想要在實體查詢上得到不同的結果,你可以通過創建2個不同的控制器使用不同的操作名稱,或者只是使用不同的參數 - 重載的方法。然後在你的datacontext中你可以有2個不同的查詢。

您使用的查詢.withParameters()禮來調用帶參數的控制器方法。

然後在控制器方法可以查詢和使用LINQ過濾器,在任何你想要的方式。這樣,您可以根據您選擇調用的查詢/控制器獲得不同的結果。

文檔:http://www.breezejs.com/documentation/querying-depth

1

微風的EntityManager緩存由主鍵的實體。所以大概你的第二個查詢正在爲每個查詢返回一組全新的實體。如果是這種情況,並且你真的只想要「最新」20,最簡單的解決方法就是在每次查詢之前簡單地清空此實體類型的EntityManager緩存。喜歡的東西:

var entities = myEntityManager.getEntities(myEntityType); 
entities.forEach(function(e) { 
    myEntityManager.detachEntity(e); 
    // or 
    // e.entityAspect.setDetached(); 
});