LINQ의 간단한 쿼리가 이상한 결과를 반환하는 이유를 알아 내려고하고 있습니다.LINQ 쿼리 첫 번째 결과의 여러 복사본 반환
데이터베이스에 정의 된보기가 있습니다. 기본적으로 몇 가지 다른 테이블을 결합하고 일부 데이터를 조작합니다. 대용량 데이터 세트를 다루고 약간 느릴 수 있다는 점을 제외하면 실제로 특별한 것은 없습니다.
오랫동안이 뷰를 쿼리하고 싶습니다. 아래의 두 가지 샘플 검색어는이보기와 다른 검색어를 보여줍니다.
var la = Runtime.OmsEntityContext.Positions.Where(p => p.AccountNumber == 12345678).ToList();
var deDa = Runtime.OmsEntityContext.Positions.Where(p => p.AccountNumber == 12345678).Select(p => new { p.AccountNumber, p.SecurityNumber, p.CUSIP }).ToList();
첫 번째 것은 목록을 반환해야합니다. 두 번째는 익명 객체 목록입니다.
엔티티 프레임 워크에서 이러한 쿼리를 수행 할 때 첫 번째 엔트리는 모두 똑같은 결과 목록을 돌려줍니다.
두 번째 쿼리는 계정 번호가 쿼리 한 값이고 다른 값은 다른 데이터를 돌려줍니다. 이것은 계좌 번호마다, 즉 하나의 계좌 번호 또는 다른 계좌 번호에 대한 쿼리를 수행하는 경우 하나의 계좌에 대한 모든 Position 객체가 동일한 금액 (해당 계좌에 대한 순위 목록의 첫 번째 계좌)과 두 번째 계정에는 모두 동일한 값을 가진 Position 객체 세트가 있습니다 (위치 객체의 첫 번째 목록에서도 마찬가지 임).
사실 두 개의 EF 쿼리 중 하나와 동일한 SQL을 쓸 수 있습니다. 그들은 모두 올바른 데이터를 보여주는 결과 (4 개)와 다른 증권 번호를 가진 하나의 계좌 번호를 반환합니다.
왜 이런 일이 발생합니까 ??? 거기에 첫 번째 쿼리의 네 가지 결과가있는 경우 첫 번째 레코드의 데이터도 2-4th의 개체에 나타납니다.
나는 이것을 일으킬 수있는 원인을 짐작할 수 없습니다. Google에서 모든 키워드를 검색했으며이 문제가있는 사용자를 보지 않았습니다. 우리는 추가 된 기능 (스마트 오브젝트)과 일부 스마트 속성을 위해 Positions 클래스를 부분 클래스로 분류합니다. 일부 뷰 모델 유형 지원을 제공하는 일부 생성자도 있습니다. 이 중 아무 것도 요청에서 호출되지 않습니다 (저는 99 % 확신합니다). 그러나 우리는 앱 전체에 동일한 패턴을 사용합니다.
내가 생각할 수있는 유일한 점은 EDMX에서 매핑이 느리다는 것입니다. EDMX의 "기본 키"가보기가 구성되는 방식에서 실제로 유일하지 않은 경우 이러한 상황이 발생할 수있는 방법이 있습니까? 이 모델을 EDMX로 가져온 개발자가 디자이너가 자동으로 선택할 항목을 선택하게했습니다.
어떤 도움을 받아야 할까?
생성 된 SQL 스크립트를 가져 와서 Management Studio에서 대화 형으로 실행하여 실제 진행 상황을 확인하십시오. –
profiler를 사용하여 수행중인 SQL을 살펴볼 수 있습니다. –