を生成した私は、EFの初心者ですので、私と一緒にクマ:EF - 多くのクエリを選択するための一つの問題では
oを私はDBには非常にまっすぐ進むの関係を有しています。 ts_Orderテーブル{ID、OrderDate、OrderNumber}およびts_OrderDetailsテーブル{ID、ProductId、OrderID}。両方の表のIDは、PK列とID列です。 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
はなぜクエリが非常に複雑に生成されますか?何か不足していますか?私はEF実際にはそれほど悪くないことを生成する見てきたものの一部に基づいて
-Vinod
単純にEFの仕組みです。 –
Linq2Sqlは、このようなクエリをより良く/悪くしますか? – Magnus
私はLINQ to SQLを一度も使用していません。私はそれを試みなければならないかもしれません!それがどうなってくるのか教えてあげましょう。 – Vinod