2009-06-11 127 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()