EF - проблема в сгенерированном запросе «один ко многим» - PullRequest
0 голосов
/ 30 июня 2011

Я новичок в EF, поэтому терпите меня: o

У меня очень прямые отношения в моей базе данных.Таблица ts_Order {ID, OrderDate, OrderNumber} и таблица ts_OrderDetails {ID, ProductId, OrderID}.ID в обеих таблицах - это столбцы PK и Identity.OrderID в таблице ts_OrderDetails - это FK и ссылается на столбец ID таблицы ts_Order.

Мне нужно выбрать все заказы вместе с каждой деталью, которая может иметь каждый заказ.В SQL я напишу что-то вроде этого:

select * from ts_Order ORD inner join ts_OrderDetails DTL on ORD.ID=DTL.OrderID

, который прекрасно работает.

Когда я пытаюсь сделать что-то похожее в EF:что генерируется 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

1 Ответ

0 голосов
/ 30 июня 2011

На основании некоторых вещей, которые я видел, EF генерирует, что на самом деле не так уж плохо. Вы не сделали ничего плохого.

Если вы хотите получить больше информации о процессе, который EF использует для получения результатов, это хорошее чтение. Также хорошее руководство для того, чтобы сделать EF максимально эффективным.

http://msdn.microsoft.com/en-us/library/cc853327.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...