2012-04-30 4 views
1

나는 동일한 결과 (행)을 얻는다. 와다른 결과

...

from f in MYVIEW 
where f.Order=="HERE" 
select f.ColA 

나는 올바른 결과가 나는이 안돼서 질문해야합니다 알고있는 콜라

반환받을. 아직 학습 ... 미리 감사드립니다.

+1

정확하게 당신의 질문은 무엇입니까? – StriplingWarrior

+0

첫 번째 쿼리에서 ColA는 각 행에 대해 Car, Car, Car ...를 반환합니다. 두 번째 쿼리 ColA는 Car, Boat, Bike ... 등을 반환하며 SQL이 뷰에 대해 반환하는 내용을 반영합니다. – Mustang31

+0

안녕 BrokenGlass, 내가 디버그에서 문제를 보았습니다, 그래서 같은 결과를 보여주는 LINQPad에서 확인으로 이동. – Mustang31

답변

3

EF는 기본적으로 EF가 모든 레코드를 고유하게 식별해야하기 때문입니다. 모든 엔티티에는 고유 키가 있어야합니다. 뷰에는 키가 없으므로 EF는 이진 데이터를 포함하지 않는 nullable이 아닌 모든 열을 사용하여 키를 유추합니다. 이제 EF는이 열이 엔티티를 고유하게 식별 할 것으로 기대합니다. 그렇지 않으면 첫 번째 예에서 볼 수있는 문제로 끝납니다. EF가 결과 세트에서 엔티티를 읽을 때 키를 확인하고 동일한 키를 가진 엔티티가 이미 작성된 경우 새 인스턴스를 작성하는 대신 해당 인스턴스를 사용합니다 -> 키 열의 동일한 값을 갖는 결과 세트의 모든 레코드가 나타납니다 같은 엔티티 인스턴스에 의해. 오늘 how to avoid this problem with views에 대해 설명했습니다.

두 번째 예는 프로젝션을 사용합니다. 이 경우 엔티티 인스턴스가 생성되지 않으며 EF는 단순히 값을 반환합니다.

+1

woa - 도움을 주셔서 감사합니다. – BrokenGlass

+0

끝내 주셔서 감사합니다. – Mustang31