3 년 후 Entity Framework v.X를 사용하여 EF4에서 이상한 동작을 보았습니다. 사실은 그 : 데이터베이스 AdventureWork에Entity Framework 4와 T-SQL 쿼리 결과가 일치하지 않습니다.
, 나는 다음과 같은 명령을 실행 :
SELECT
[Project1].[ProductID] AS [ProductID],
[Project1].[C1] AS [C1],
[Project1].[ProductID1] AS [ProductID1],
[Project1].[DocumentID] AS [DocumentID],
[Project1].[ModifiedDate] AS [ModifiedDate]
FROM (SELECT
[Extent1].[ProductID] AS [ProductID],
[Extent2].[ProductID] AS [ProductID1],
[Extent2].[DocumentID] AS [DocumentID],
[Extent2].[ModifiedDate] AS [ModifiedDate],
CASE WHEN ([Extent2].[ProductID] IS NULL) THEN CAST(NULL AS int) ELSE 1
END AS [C1]
FROM [Production].[Product] AS [Extent1]
LEFT OUTER JOIN [Production].[ProductDocument] AS [Extent2] ON ([Extent1].[ProductID] = [Extent2].[ProductID]) AND ([Extent2].[ProductID] = [Extent1].[ProductID])
) AS [Project1]
ORDER BY [Project1].[ProductID] ASC, [Project1].[C1] ASC
가 일단 SSMS에서 실행 :
var query = (ObjectQuery) context.Products.Select(p => p.ProductDocuments.Where(c => c.ProductID == p.ProductID));
Console.WriteLine(query.ToTraceString());
ToTraceSstring()
이 실행됩니다 실제 쿼리를 보여줍니다 505 행을 표시합니다. 내가 EF에서 실행하려고 할 때
그러나 :
var query= context.Products.Select(p => p.ProductDocuments.Where(c => c.ProductID == p.ProductID));
Console.WriteLine(query.Count());
만 504 선을 반환합니다.
결과를 비교 한 결과, 동일한 ProductID = 506을 갖는 ProductDocument
에는 두 개의 행이있는 것으로 보입니다. 이는 완전히 정상입니다. 이러한 중복 행은 예상대로 두 번이 아닌 한 번만 검색됩니다.
그 문제에 대한 아이디어가 있으십니까?