0
我是EF新手,所以忍耐一下:○EF - 問題在一對多選擇查詢生成
我在DB一個非常簡單的關係。 ts_Order表{ID,OrderDate,OrderNumber}和ts_OrderDetails表{ID,ProductId,OrderID}。兩個表中的ID都是PK和標識列。 ts_OrderDetails表中的OrderID是FK,並引用ts_Order表的ID列。
我需要選擇所有訂單以及每個訂單可能具有的每個細節。在SQL我會寫這樣的事情:
select * from ts_Order ORD inner join ts_OrderDetails DTL on ORD.ID=DTL.OrderID
這工作得很好。
當我嘗試做的EF類似的東西:
List<Order> result = context.Orders.Include("OrderDetails").Where(i => i.ID > 0).ToList();
這是由EF生成的內容:
SELECT
[Project1].[ID] AS [ID],
[Project1].[OrderDate] AS [OrderDate],
[Project1].[OrderNumber] AS [OrderNumber],
[Project1].[C1] AS [C1],
[Project1].[ID1] AS [ID1],
[Project1].[Product] AS [Product],
[Project1].[OrderID] AS [OrderID]
FROM (SELECT
[Extent1].[ID] AS [ID],
[Extent1].[OrderDate] AS [OrderDate],
[Extent1].[OrderNumber] AS [OrderNumber],
[Extent2].[ID] AS [ID1],
[Extent2].[Product] AS [Product],
[Extent2].[OrderID] AS [OrderID],
CASE WHEN ([Extent2].[ID] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C1]
FROM [dbo].[ts_Order] AS [Extent1]
LEFT OUTER JOIN (SELECT
[ts_OrderDetails].[ID] AS [ID],
[ts_OrderDetails].[Product] AS [Product],
[ts_OrderDetails].[OrderID] AS [OrderID]
FROM [dbo].[ts_OrderDetails] AS [ts_OrderDetails]) AS [Extent2] ON [Extent1].[ID] = [Extent2].[OrderID]
WHERE [Extent1].[ID] > 0
) AS [Project1]
ORDER BY [Project1].[ID] ASC, [Project1].[C1] ASC
爲什麼會產生如此複雜的查詢?我錯過了什麼嗎?
-Vinod
只要是EF如何工作的。 –
Linq2Sql會做出什麼樣的查詢,更好還是更差? – Magnus
我從來沒有使用過LINQ to SQL。可能是我應該嘗試一下!我會讓你知道它出現了什麼。 – Vinod