2013-04-11 1 views
1

를 소모 할 때.중복 항목 The <strong>WCF/중 하나로, OData의 웹 서비스를</strong> 반환 유형 <code>vBeheer</code>의 <strong>편안한</strong> 항목 중 하나로, OData 서비스

클라이언트에 내가 소비하는 방법 작성 :

 SRTDBEntities es = new SRTDBEntities(_serviceRoot); 
     return es.vBeheer.Where(b => 
      b.TrackID == trackid && 
      b.PersoonID == CurrentPersoon.ID); 

그러나 내가 발견 (디버깅의 오후 후) 식에 .ToList()를 추가 할 때을의 결과 집합은를 손상 간다. 항목의 Count()이 정확하고 예상대로이지만 항목의 값이 잘못되었습니다. 많은 것은 중복이고 많은 것은 이 누락되어 (분명히)입니다.

그래서 내가 linqpad이 테스트 : :

vBeheer.Where (b => b.TrackID==23 && b.PersoonID == 19 ).Dump(); 
  • 반환 올바른 결과가 예상대로 서비스 FOM, ID 는 "행"당 고유 값을 지정할 수 있습니다

    right

    하지만 .ToList를 추가 할 때이 많은 중복 된 결과

    vBeheer.Where (b => b.TrackID==23 && b.PersoonID == 19 ).ToList().Dump(); 
    

    ()가 잘못되면 (어떤 패턴없이?)를 항목

    enter image description here

    이 문제가 예기치 않은 원치 않는 것입니다. 그리고 훨씬 더 흥미 롭습니다. 우리는 결과가 여전히 정확한 서버를 (웹 서비스에서) 디버깅 할 때 데이터베이스가 올바른 결과를 반환하지만 클라이언트에 도착하면 오류가 심각하게 발생한다고 판단했습니다.

    IT는 문제가되지 않지만 데이터는 ToList()를 수행하는 DevExpress 구성 요소 (DXGrid)에서 사용됩니다.

    주의 : 브라우저에서 쿼리를 실행 :

    http://localhost:52671/SRTDataService.svc/vBeheer()?$filter=TrackID%20eq%2023%20and%20PersoonID%20eq%2019 
    

    는 고유 항목의 예상 집합을 반환합니다.

+1

이것은 대개 고유하지 않은 키 열 (EF 모델에서)이있는 뷰를 보유하고 있음을 나타냅니다. 'ToList()'가있는 것과없는 차이는 예상하지 못합니다. –

+0

당신은 그 대답을 할 수 있습니까? 아놀드, 나는 그것을 검사했고, 실제로 edmx를 재생성 한 후에, 키는 어떻게 든 변경되었습니다. 나는 그것을 고쳤다. .. –

답변

5

이것은 대개 고유하지 않은 키 열 (EF 모델에서)이있는 뷰를 나타냅니다. EF는 읽은 첫 번째 행을 일련의 키 값으로 반복합니다.

ToList()과의 차이는 예상하지 못했습니다. 이것은 Linqpad가 Dump()을 실행할 때 수행하는 쿼리를 열거하는 방법 일뿐입니다.

+0

이것은 edmx 재생성 중 발생했다. 열쇠가 떨어졌습니다. 나는 그들을 돌려 놓는다. –