2010-05-26 13 views
15

Ho un'entità prodotto, che ha 0 o 1 entità "BestSeller". Per qualche motivo quando dico:Un numero eccessivo di join esterni a sinistra in Entity Framework 4?

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

l'SQL I get ha un join esterno "extra" (sotto). E se aggiungo una seconda nave 0 o 1, e ordino entrambi, allora ottengo join esterni. Sembra che ciascuna di queste entità produca 2 join esterni anziché uno. LINQ to SQL si comporta esattamente come ci si aspetterebbe, senza un join aggiuntivo.

Qualcun altro ha provato questo o sa come risolverlo?

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

Sembra come se lo fa solo questo per un'entità 0..1. Se è presente una raccolta di entità, il carico eccessivo della raccolta determina il corretto singolo join esterno. –

risposta

2

ho chiesto Julie Lerman per rispondere a una domanda simile qui:

Si prega di consultare Simple Linq query has duplicated join against same table?

+1

Questo problema è stato risolto nel CTP di giugno: http://blogs.msdn.com/b/adonet/archive/2011/06/30/announcing-the-microsoft-entity-framework-june-2011-ctp.aspx –

2

Quell'unione extra esterna sembra del tutto superflua. Penso che sia meglio contattare il team di progettazione della struttura dell'entità. Potrebbero sapere se si tratta di un bug e vedere se è qualcosa che deve essere risolto in una prossima versione. Puoi contattarli al numero http://blogs.msdn.com/b/efdesign/contact.aspx

+2

Buona chiamata - l'ho appena fatto. –

+1

+1 per aver dedicato del tempo per contribuire a migliorare il software! – JohnB

+0

Sei curioso di sapere se hai sentito la risposta del team EF? Sto vedendo la stessa cosa e curioso di sapere se lo chiamano bug o "feature". Ho pensato di chiedere qui prima di contattare la squadra. –

1

Potrebbe trattarsi di un errore, ma sembra un esempio talmente semplice che è strano che il bug non sia stato rilevato e risolto.

Puoi controllare il tuo modello EF.

La tabella BestSeller è stata aggiunta due volte oppure esiste una duplicazione nella relazione tra le tabelle.

+0

Controllare anche l'SSDL e assicurarsi che la tabella sia mappata correttamente. –

+0

Ho controllato l'XML del modello di entità e non ho visto niente saltare fuori da me. Speriamo che la gente del Blog EF possa fornire qualche intuizione. –

+0

Maledire il team Includi .. EF ha bisogno di ottimizzare questo in grande stile! –

Problemi correlati