3年後にEntity Framework v.Xを使用した後、EF4から奇妙な動作が見られました。 事実があることです、私は次のコマンドを実行し、データベースAdventureWorkでEntity Framework 4とT-SQLクエリの結果が一致しません
:
var query = (ObjectQuery) context.Products.Select(p => p.ProductDocuments.Where(c => c.ProductID == p.ProductID));
Console.WriteLine(query.ToTraceString());
ToTraceSstring()
が実行される実際のクエリを示しています
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
505行を表示します。
しかし、私はEFから実行しよう:
var query= context.Products.Select(p => p.ProductDocuments.Where(c => c.ProductID == p.ProductID));
Console.WriteLine(query.Count());
それだけで504行を返します。
結果を比較すると、同じProductID = 506を持つProductDocument
には2つの行があるように見えますが、これは完全に正常です。これらの重複行は、期待どおりに2回ではなく1回だけ取り出されます。
その問題の考えはありますか?