2009-06-11 134 views
4

我目前有一個由許多鏈接對象組成的數據庫。實體框架加載多級聯繫

簡體較少的對象:

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

現在我明白我可以使用貪婪加載所有這些對象時

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

然而,當我只想1首歌曲與它的數據,這將導致加載所有歌曲和所有參考。

是否有更簡單的方法,如:

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

還是我真的必須使用:

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

這是可行的,如果你有一些相關的對象,但我有像10對象也有子對象...

請給我一個更好的方法。

回答

1

你只寫:

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(); 

如果由於某種原因,這實際上並沒有做「包含」(如果您在WHERE子句中做有趣的事情時可能會失敗)檢查這個提示出去解決方法:Tip 22 - How to make Include really Include

希望這有助於

亞歷

+0

但是,不是先加載所有的歌曲和參考,然後選擇第一個? IE:它真的只加載id = 1的歌曲的引用嗎? – Peterdk 2009-06-16 10:31:45

0

你也可以寫像(在VB)

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