2013-10-14 3 views
0

그래서 약간 이상한 것이므로 실제로 어떤 원인도 찾을 수 없습니다.Breeze.js는 로컬에서 실행될 때 쿼리 순서를 뒤집습니다.

내 앱은 기본적으로 로컬 캐시 등을 쿼리하는 것과 같은 일을 처리하는 하나의 표준 방법을 통해 거의 모든 쿼리를 실행하도록 설정되어 있습니다. 기본적으로 쿼리는 모두 매우 표준화되어 있습니다.

그런 다음 이상한 orderby 문제가 있습니다. 쿼리에는 특정 orderby 절이 포함되어 있습니다. 쿼리를 처음 실행하면 캐시가 검사되고 결과가 없으며 원격 데이터 원본을 쿼리하고 데이터를 모두 가져오고 정렬됩니다.

페이지로 돌아 가면 쿼리가 다시 실행되고 로컬 캐시에 대해 쿼리가 실행되어 데이터를 찾아서 반환합니다 ... 이상한 부분은 순서가 바뀌 었습니다. 매개 변수가 똑같은 점을 명심하십시오. 유일한 차이점은 executeQueryLocally를 사용하여 쿼리가 실행되고 결과가 발견되어 반환된다는 것입니다 (첫 번째 쿼리에서는 여전히 executeQueryLocally를 사용하여 실행되지만 결과가 없다는 것입니다 원격으로 실행하기 위해 진행됩니다).

결과가 역전 된 이유는 무엇인지 구체적으로 알 수 없습니다. (나는 그들이 역전되어 있다고 말하면 실제로 보증 할 수 없습니다 - 순서가 정해지지 않고 뒤집힌 순서대로 나옵니다)

이것은 실제로 두통을 유발하지 않습니다. 특히 이상한 일입니다. 특히 이런 일이 발생하는 유일한 쿼리 인 것 같습니다.

생각하십니까?

+0

Breeze에서 강제로 주문 하시겠습니까? 그렇다면 orderBy 절을 사용하도록 고려 했습니까? 일반적으로 뷰 모델은 정렬, 정렬 등을 담당해야합니다 ... –

+0

매우 유감스럽게도 모두 orderby에 대해 언급했지만 쿼리에 특정 orderby 절이 포함되어 있음을 분명히하지 않았습니다. 따라서 두 쿼리가 실제로 정확히 동일하므로 둘 다 동일한 특정 orderby 클래스를 포함한다는 점을 기억하십시오. 첫 번째 쿼리는 로컬 캐시에서 아무것도 찾지 않고 서버에서 실행되는 반면 두 번째 쿼리는 캐시에서 결과를 가져옵니다. – Adam

+0

"주문 중"이 서버 쿼리 또는 클라이언트 쿼리에서 수행되고 있지 않다는 말입니까? –

답변

0

"orderBy"절이 지정되어 있지 않으면 서버 쪽 쿼리와 클라이언트 쪽 쿼리가 특정 순서로 결과를 반환하지 않을 수도 있습니다. "orderBy"절이없이 순서가 다를 수있는 이유는 데이터가 서버와 클라이언트에서 매우 다르게 저장된다는 것입니다. 특정 순서가 지정되어 있지 않으면 둘 다 저장소 구현을 고려하여 가능한 한 효율적으로 쿼리를 충족 시키려고 시도합니다 .

ANSI 92 SQL 표준에 따르면 SQL 데이터베이스조차도 동일한 쿼리에 대해 동일한 순서로 데이터를 반환 할 필요가 없습니다 (다시 ORDER BY 절이없는 경우). 그 일이 일어나는 것을 보는 것은 매우 드뭅니다.

+0

이 경우 orderby가 지정되고 있지만 처음에는 정리하지 않았습니다. 여기서 이상한 행동은 서버에 보낼 때 쿼리가 완벽하게 orderby를 구현하지만 로컬 캐시에 대해 실행될 때 동일한 쿼리가 orderby를 존중하지 않거나 역전한다는 것입니다. 정확하게 수행 할 수 없었습니다. 최종 결과가 서버에 대해 실행될 때와 다른 순서로 레코드에 관계없이 현재 어떤 것을 결정합니다. – Adam

+0

아직 해결해야 할 것이 없지만 1.4.5 릴리스로 다시 테스트하고 설명대로 동작하는지 확인해야합니다. – Adam

+0

또 다른 가능성은 breeze의 localQueryComparisonOptions를 데이터베이스의 localQueryComparisonOptions와 일치하도록 설정해야 할 수도 있다는 것입니다. http : //www.breezejs를 참조하십시오.co.kr/sites/all/apidocs/classes/LocalQueryComparisonOptions.html # method_ LocalQueryComparisonOptions –

관련 문제