2009-12-18 1 views
1

지난 한 해 동안 LINQ to SQL을 사용했지만 문제가 없었습니다. 필자는 고객 데이터베이스의 여러 뷰에서 일부 원시 데이터를 반환하는 것이었던 프로젝트에서 EntityFramework를 실험하기로 결정했습니다. 뷰를 포함하는 엔티티 모델을 만들었지 만 특정 값에 대한 고유 한 행을 반환하는 쿼리를 작성할 때 중복이 반환되었습니다.LINQ to ENTITIES DISTINCT LINQ TO SQL이 예상대로 작동하면 중복을 반환합니다.

EntityKey가 true로 설정된 유일한 열은 PWSID이지만 해당 열은 많은 중복을 포함합니다. 다음은 내 쿼리입니다.

int[] pwsIds = (from attribs in db.VW_DOR_ParcelAttribs_All 
       select attribs.PWSID).Distinct().ToArray(); 

LINQ to SQL 데이터 모델을 만들고 동일한 쿼리를 사용하여 모든 것이 예상대로 작동합니다. 두 가지 데이터 모델을 변경하지 않았습니다.

나는 EntityKey 속성 값을 false로 설정하려고 시도했지만 컴파일러 오류가 발생했습니다. 나는 고객의 테이블에 대한 통제권이 없다. 진짜로 유일한 열쇠가 없다.

이 응용 프로그램에서는 LINQ to SQL을 사용할 수 있으며 훌륭하게 작동하지만 앞으로 Entity Framework를 사용해야 할 때 내가 잘못했는지 이해하려고 노력하고 있습니다. 모든 통찰력이 인정됩니다.

답변

3

EntityKey는 해당 테이블에서 고유해야하는 속성 또는 속성 조합에 설정해야합니다. 나는 EF가 .Distinct()을 최적화하고 있다고 생각한다. 왜냐하면 그 아이템은 중복을 포함 할 수 없다고 가정하기 때문이다.

+1

적당하다고 들립니다. – Rick