2009-06-11 18 views
4

Ich habe derzeit eine Datenbank, die aus vielen verknüpften Objekten besteht.Entity Framework Loading MultiLevel Associations

Simplified mit weniger Objekten:

Song => Versions => Info 
      || 
      \/ 
     Data 

Jetzt verstehe ich, dass ich diese Objekte alle eifrig Last kann, wenn jedoch

db.Song.include("Versions.Data").Include("Versions.Info").ToList(); 

verwenden, wenn ich mit seinen Daten nur 1 Song will dies wird dazu führen, um alle Lieder und alle Referenzen zu laden.

Gibt es einen einfacheren Weg, wie:

db.Song.First().include("Versions.Data").Include("Versions.Info") 

Oder verwende ich wirklich:

Song.Versions.Load(); 
foreach(Version version in versions) 
{ 
    version.DataReference.Load(); 
    version.InfoReference.Load(); 
} 

Es ist machbar, wenn Sie ein paar verwandten Objekte, aber ich habe wie 10 Objekte, die sich auch selbst subject haben ...

Bitte zeigen Sie mir einen besseren Weg.

Antwort

1

Sie schreiben gerade dies:

var song = (from s in db.Song.Include("Versions.Data").Include("Versions.Info") 
      where s.ID == 1 // i.e. some filter here 
      select s).First(); 

Wenn aus irgendeinem Grund dies nicht wirklich tun, um die ‚Include‘ (es könnte fehlschlagen, wenn Sie, wo Klausel in Ihre interessante Dinge tun) lesen Sie in diesem Tipp out für eine Abhilfe: Tip 22 - How to make Include really Include

this helps

Alex

+0

Aber lädt das zuerst alle Lieder und Referenzen und dann die erste? IE: Lädt es wirklich nur die Referenzen eines Songs mit id = 1? – Peterdk

+0

Es werden nur die Referenzen auf Song 1 geladen. –

0

Sie könnten auch sie wie (in VB) schreiben

dim song = db.Song.Include("Versions.Data").Include("Versions.Info").Where(Function(s) s.ID = 1).FirstOrDefault() 
Verwandte Themen