2
我有两个导航属性 - VersionReported和VersionResolved,都存储在表版本中的任务表。当我试图让任务列表与包括这两个属性,我得到太多的加入在SQL(这仅仅是从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]
Extent1是任务表。我知道EntityFramework在两个或多个导航属性导致同一个表时有问题,但是有没有人找到解决方案?
这确实很丑,但它实际上是一个性能问题? SQL Server应该很快执行这个查询,因为数据页面将在缓存中。在EF 4中,SQL生成得到了很大的改进,因为它是值得的。 – 2009-10-05 13:07:36
现在它不是一个性能问题,但它可能是:)现在处理它(如果可能的话)比在生产环境中处理它更好。如果有解决方案,最好是知道它:)它也可能导致其他引擎的问题。 Oracle有1000个列限制,并且通过多次连接,您可以轻松实现。 – LukLed 2009-10-05 13:29:32