Слишком много левых внешних соединений в Entity Framework 4? - PullRequest
15 голосов
/ 27 мая 2010

У меня есть сущность продукта, которая имеет 0 или 1 сущность "BestSeller". Почему-то, когда я говорю:

db.Products.OrderBy(p => p.BestSeller.rating).ToList();

SQL, который я получаю, имеет «дополнительное» внешнее соединение (ниже). И если я добавлю второй корабль отношений 0 или 1 и упорядочу их обоими, то получу 4 внешних соединений. Кажется, что каждая такая сущность производит 2 внешних соединения, а не одно. LINQ to SQL ведет себя точно так же, как и следовало ожидать, без дополнительного объединения.

Кто-нибудь еще испытывал это или знает, как это исправить?

SELECT 
[Extent1].[id] AS [id], 
[Extent1].[ProductName] AS [ProductName]
FROM   [dbo].[Products] AS [Extent1]
LEFT OUTER JOIN [dbo].[BestSeller] AS [Extent2] ON [Extent1].[id] = [Extent2].[id]
LEFT OUTER JOIN [dbo].[BestSeller] AS [Extent3] ON [Extent2].[id] = [Extent3].[id]
ORDER BY [Extent3].[rating] ASC

Ответы [ 3 ]

3 голосов
/ 01 января 2011

Я попросил Джули Лерман ответить на аналогичный вопрос здесь:

Пожалуйста, смотрите Простой запрос Linq дублировал соединение к той же таблице?

2 голосов
/ 27 мая 2010

Это дополнительное внешнее соединение кажется излишним. Я думаю, что лучше всего связаться с командой по разработке структуры сущностей. Они могут знать, является ли это ошибкой, и посмотреть, нужно ли что-то исправить в следующей версии. Вы можете связаться с ними по телефону http://blogs.msdn.com/b/efdesign/contact.aspx

1 голос
/ 27 мая 2010

Это может быть ошибка, но кажется, что это такой простой пример, что странно, что ошибка не была обнаружена и исправлена.

Не могли бы вы проверить свою модель EF.

Была ли таблица BestSeller добавлена ​​дважды или есть дублирование в отношениях между таблицами.

...