2009-06-11 4 views
4

В настоящее время у меня есть база данных, состоящая из многих связанных объектов.Entity Framework Загрузка многоуровневых ассоциаций

Упрощенный с меньшим количеством объектов:

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

Если по каким-то причинам это не на самом деле делать то «Включить» (это может потерпеть неудачу, если вы делаете интересные вещи в вашем где п) проверить эту Высыпать для обходной путь: Tip 22 - How to make Include really Include

Надеется, что это помогает

Alex

+0

Но это не загружает сначала все песни и ссылки, а затем выбирает первый? IE: Действительно ли это загружает ссылки на песню с id = 1? – Peterdk

+0

Он загружает только ссылки на песню 1. –

0

Вы также можете записать его как (в VB)

dim song = db.Song.Include("Versions.Data").Include("Versions.Info").Where(Function(s) s.ID = 1).FirstOrDefault() 
Смежные вопросы