Entity Framework Загрузка многоуровневых ассоциаций - PullRequest
4 голосов
/ 11 июня 2009

В настоящее время у меня есть база данных, которая состоит из множества связанных объектов.

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

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 объектов, у которых тоже есть подчиненные объекты ...

Пожалуйста, покажи мне лучший способ.

Ответы [ 2 ]

1 голос
/ 12 июня 2009

Вы просто напишите это:

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

Если по какой-то причине это на самом деле не делает «Включить» (может произойти сбой, если вы делаете интересные вещи в предложении «где»), попробуйте этот совет для обходного пути: Совет 22 - Как сделать «Включить действительно» Включить

Надеюсь, это поможет

Alex

0 голосов
/ 14 июня 2009

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

dim song = db.Song.Include("Versions.Data").Include("Versions.Info").Where(Function(s) s.ID = 1).FirstOrDefault()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...