2010-05-26 73 views
15

我有一个产品实体,它有0或1个“BestSeller”实体。出于某种原因,当我说:实体框架4中的左外连接太多?

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

我得到有“额外的”外的SQL连接(如下图)。如果我添加第二个0或1关系船,并通过两者订购,那么我会得到外部连接。似乎每个这样的实体都会生成2个外连接而不是1个连接。 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 
+0

它好像它只做这一个0..1实体。如果有实体的集合,那么急切地加载集合确实会导致正确的单个外连接。 – 2010-05-27 18:49:39

回答

2

那个额外的外连接看起来相当多余。我认为最好联系实体框架设计团队。他们可能知道这是否是一个错误,看看是否需要在下一个版本中解决。你可以联系他们http://blogs.msdn.com/b/efdesign/contact.aspx

+2

良好的通话 - 只是做到了。 – 2010-05-27 13:40:31

+1

+1花时间帮助软件更好! – JohnB 2010-05-27 21:11:39

+0

只是好奇你是否从英孚团队回来了?我看到同样的事情,并且好奇地想知道他们是否称这是一个错误或“功能”。以为在我联系团队之前,我会问这里。 – 2010-06-03 20:54:07

1

它可能是一个bug,但它似乎是一个这样一个简单的例子,它很奇怪,该错误还没有被捕获和修复。

你可以检查你的EF模型。

是否将BestSeller表添加了两次,或者是否存在表之间关系的重复。

+0

同时检查SSDL并确保表格映射正确。 – 2010-05-27 13:10:58

+0

我检查了实体模型的XML,我没有看到任何东西跳出来。希望EF博客的人可以提供一些见解。 – 2010-05-27 13:40:13

+0

诅咒包括..英孚团队需要大大优化这个! – 2011-12-03 04:34:58