2012-01-10 5 views
3

다음과 같은 URL 필터가 있습니다. t1? $ filter = ID eq 1 & $ expand = t2/t3/t4/t5/t6.ODATA 확장이 제대로 작동하지 않습니다.

이제 문맥을 사용한 첫 번째 쿼리로이 쿼리를 실행하면 모든 것을 얻을 수 있습니다! 다른 페이지에서이 동일한 쿼리를 실행하면 동일한 objectcontext를 사용하여 이전 쿼리가 실행 된 후 두 번째 쿼리가 실행되면 쿼리가 t3에서 확장을 멈 춥니 다! 객체 ID가 분명히 존재하더라도 객체는 null입니다. 데이터가 존재합니다! 여기에는 정말 이상한 것이 있습니다. 참고 : singleton objectcontext 팩토리 클래스를 사용하므로 각 페이지가 자체 객체 컨텍스트를 인스턴스화하여 CRUD 작업을 실행하는 데 사용합니다.

답변

9

WCF DS 클라이언트 라이브러리 (DataServiceContext 및 관련 클래스)를 사용한다고 가정하면 클라이언트의 DataServiceContext.MergeOption 설정 때문일 가능성이 큽니다. 디폴트는 AppendOnly입니다. 이는 주어진 엔티티의 인스턴스가 이미 클라이언트에 존재하면 서버에서 오는 새로운 데이터가이를 업데이트하지 않음을 의미합니다. 이는 클라이언트에서 수행 된 가능한 변경 사항을 겹쳐 쓰는 쿼리를 방지하기위한 것입니다. MergeOption을 OverwriteChanges로 변경하면 서버 값이 사용됩니다. (탐색 속성에도 적용되므로 확장이 작동하지 않는 것처럼 보이지만 실제로 서버는 클라이언트에 데이터를 보내지 만 클라이언트는 데이터를 삭제합니다).

+0

흥미 롭습니다. 나는 일하고 곧바로 이것을 시도 할 것이다. 이 옵션은 각 엔티티의 CRUD 권한을 설정하는 서비스 초기화에 있다고 가정합니다. –

+0

효과가있었습니다! 분명히 나는이 옵션들에 익숙해 질 필요가 있었다. –

관련 문제