2013-10-14 24 views
0

因此,我找不到任何真正的原因。Breeze.js在本地執行時反轉查詢順序

我的應用程序設置爲基本上通過一個標準方法來運行幾乎所有的查詢,處理諸如查詢本地緩存等事情。所以基本上這些查詢都非常標準化。

然後我只有一個,有一個奇怪的orderby問題。該查詢包含特定的orderby子句,如果我第一次運行查詢,則會檢查緩存,未找到任何結果,查詢遠程數據源,獲取數據,所有數據都是正確的和有序的。

當我返回頁面時,再次執行查詢,查詢針對本地緩存執行,它在那裏查找數據並返回它......奇怪的部分是順序顛倒。記住進入的參數是完全一樣的,唯一的區別是查詢是用executeQueryLocally執行的,並且找到並返回結果(在第一個查詢中,仍然使用executeQueryLocally執行,只是沒有找到結果並繼續遠程執行它)。

我真的無法看到任何具體問題,爲什麼結果是相反的(我說他們是顛倒過來的,我實際上不能保證 - 他們可能只是無序的,碰巧出現在相反的順序)

這不是真的令人頭疼,它只是奇怪的,尤其是因爲它似乎只有一個查詢發生這種情況)。

想法?

+0

你想讓Breeze強制訂購嗎?如果是這樣,你有沒有考慮使用orderBy子句?一般來說,你的視圖模型應該負責排序,排序等... –

+0

非常抱歉,大家,我提到了orderby,但忘記明確說明有一個特定的orderby子句包含在查詢中。因此,請記住兩個查詢實際上是完全一樣的,因此兩者都包含相同的特定順序,只是第一個在本地緩存中找不到任何內容,最終在服務器上運行,而第二個從緩存中獲取結果。 – Adam

+0

你是說在服務器查詢或客戶端查詢中沒有執行「排序」? –

回答

0

服務器端查詢和客戶端查詢不保證以任何特定順序返回結果,除非您有指定的「orderBy」子句。如果沒有「orderBy」子句,順序可能會不同,原因是數據在服務器和客戶端上的存儲方式非常不同,除非指定了特定的順序,否則將盡可能有效地滿足查詢,因爲存儲實現。

有趣的一面是,根據ANSI 92 SQL標準,即使您的SQL數據庫不需要以相同的查詢順序返回數據(除非您有ORDER BY子句)。只是看到它的發生是非常罕見的。

+0

在這種情況下,orderby正在被指定,我最初沒有說清楚。這裏奇怪的行爲是,發送到服務器的查詢完美地實現了該命令,但是在針對本地緩存執行時的相同查詢要麼不遵守orderby,要麼正在顛倒它 - 我還沒有完全能夠確定目前哪一個 - 不管最終結果是否與按服務器執行時的順序不同,記錄的順序不同。 – Adam

+0

我還沒有解決這個問題,但我需要再次測試1.4.5版本,看看它是否仍然像描述的那樣工作。 – Adam

+0

另一種可能性是您可能需要將breeze的localQueryComparisonOptions設置爲與您的數據庫匹配。請參閱http://www.breezejs。com/sites/all/apidocs/classes/LocalQueryComparisonOptions.html#method_ LocalQueryComparisonOptions –