2016-12-09 1 views
0

Sagen wir Table1 Referenzen Table2 während Table2 Referenzen Table3.EF: Ist die Fremdtabelle einer Fremdtabelle enthalten, wenn Sie Include verwenden?

Abfrage:

x.Table1.Include(x=> x.Table2) 
    .Where(x=> x.something == 1).Select(x=> new{ 
    T2Model = x.Table2.Select(y=> new{ 
      T3Val = y.Table3.val 
    }) 
}).ToList() 

Wird Include(x=> x.Table2) sicherzustellen, dass val von Table3 würde ohne Probleme geladen werden?

+0

Nein, solange Lazy Loading eingeschaltet ist, Sie haben um jede einzelne fremde Entität einzubeziehen, aber die Variable in Ihrer Auswahl wird korrekt geladen –

Antwort

2

Ihre Abfrage sollte funktionieren, wenn Sie den Include Anruf entfernen:

x.Table1 
    .Where(x=> x.something == 1).Select(x=> new{ 
    T2Model = x.Table2.Select(y=> new{ 
      T3Val = y.Table3.val 
    }) 
}).ToList(); 

Ihr Vorsprung ist, was die val von Table3 gewährleistet wird geladen, weil Ihre Linq to Entities-Abfrage später übersetzt werden wird, um SQL, und aufgrund dessen, was Sie in Ihrem Select tun, wird der Linq-Anbieter abziehen, es muss zwei innere Joins tun, um diese Projektion zu tun.

Wenn Sie nicht verwandten Eigenschaften projizieren verwenden und Sie wollen, dass sie laden (mit verzögertes Laden gesperrt), dann verwenden Sie die Include Erweiterungsmethode:

x.Table1.Include(x=> x.Table2.Select(e=>e.Table3)); 
Verwandte Themen