2010-05-26 74 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