Множественные объединения в SQL, созданные с помощью Entity Framework - PullRequest
2 голосов
/ 05 октября 2009

У меня есть таблица задач с двумя свойствами навигации - VersionReported и VersionResolved, оба хранятся в таблице Versions. Когда я пытаюсь получить список задач с включенными обоими свойствами, я получаю слишком много объединений в SQL (это только часть sql из профилировщика):

LEFT OUTER JOIN [dbo].[Versions] AS [Extent4] ON [Extent1].[IDVersionReported] = [Extent4].[ID]
LEFT OUTER JOIN [dbo].[Versions] AS [Extent5] ON [Extent1].[IDVersionReported] = [Extent5].[ID]
LEFT OUTER JOIN [dbo].[Versions] AS [Extent6] ON [Extent1].[IDVersionReported] = [Extent6].[ID]
LEFT OUTER JOIN [dbo].[Versions] AS [Extent7] ON [Extent1].[IDVersionReported] = [Extent7].[ID]
LEFT OUTER JOIN [dbo].[Versions] AS [Extent8] ON [Extent1].[IDVersionResolved] = [Extent8].[ID]
LEFT OUTER JOIN [dbo].[Versions] AS [Extent9] ON [Extent1].[IDVersionResolved] = [Extent9].[ID]
LEFT OUTER JOIN [dbo].[Versions] AS [Extent10] ON [Extent1].[IDVersionResolved] = [Extent10].[ID]
LEFT OUTER JOIN [dbo].[Versions] AS [Extent11] ON [Extent1].[IDVersionResolved] = [Extent11].[ID]

Экстент1 - таблица задач. Я знаю, что EntityFramework имеет проблему, когда два или более свойств навигации ведут к одной и той же таблице, но кто-нибудь нашел решение?

1 Ответ

2 голосов
/ 05 октября 2009

Я присоединился к проекту EF около 2 месяцев назад, и мы тоже заметили эту проблему.

Полагаю, самое простое (и наиболее эффективное) решение - создать представление, которое выполняет всю магию JOIN, и отобразить это представление в EF.

С другой стороны, требование представления для каждой проблемы производительности, вероятно, не то, что мы ожидали, когда начали работать с EF.

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