views:

280

answers:

2

I have a product entity, which has 0 or 1 "BestSeller" entities. For some reason when I say:

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

the SQL I get has an "extra" outer join (below). And if I add on a second 0 or 1 relation ship, and order by both, then I get 4 outer joins. It seems like each such entity is producing 2 outer joins rather than one. LINQ to SQL behaves exactly as you'd expect, with no extra join.

Has anyone else experienced this, or know how to fix it?

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
+1  A: 

That extra outer join does seem quite superfluous. I think it's best to contact the entity framework design team. They may know if it's a bug and see if it something that needs to be resolved in a next version. You can contact them at http://blogs.msdn.com/b/efdesign/contact.aspx

René Wolferink
Good call - just did that.
Adam
+1 for taking the time to help make the software better!
JohnB
Just curious whether you heard back from the EF team? I'm seeing the same thing and curious to know if they're calling this a bug or a "feature". Thought I'd ask here before I contact the team.
David Kreps
I'm also curious for any response. In the mean time i've run into this problem as well. With small DBs and low load it's not a big problem, but for more heave users this really can pose a problem!
René Wolferink
+1  A: 

It may be a bug, but it seems like such a simple example that it is strange that the bug has not been caught and fixed.

Could you check your EF model.

Has the BestSeller table been added twice, or is there a duplication in the relationship between the tables.

Shiraz Bhaiji
Also check the SSDL and make sure the table is mapped correctly.
Craig Stuntz
I checked the XML of the entity model, and I didn't see anything jumping out at me. Hopefully the folks at the EF Blog can provide some insight.
Adam