J'ai une table de tâches avec deux propriétés de navigation - VersionReported et VersionResolved, toutes deux stockées dans des versions de table. Lorsque je tente d'obtenir la liste des tâches avec les deux propriétés incluses, je reçois trop de jointures dans SQL (ce qui est seulement une partie de sql de profileur):Plusieurs jointures dans SQL générées avec Entity Framework
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]
Extent1 est la table des tâches. Je sais que EntityFramework a un problème lorsque deux propriétés de navigation ou plus mènent à la même table, mais quelqu'un a-t-il trouvé une solution?
C'est en effet moche, mais est-ce vraiment un problème de performance? SQL Server doit exécuter cette requête très rapidement, car les pages de données seront dans le cache. La génération SQL est considérablement améliorée dans EF 4, pour ce que ça vaut. –
À l'heure actuelle, ce n'est pas un problème de performance, mais cela peut être le cas :) Il est préférable de le gérer dès maintenant (si c'est possible) plutôt que d'y faire face dans un environnement de production. S'il y a une solution, il est préférable de le savoir :) Cela peut aussi causer des problèmes sur d'autres moteurs. Oracle a une limite de 1000 colonnes et en multipliant les jointures, vous pouvez facilement l'atteindre. – LukLed