Entity Framework ленивая загрузка - PullRequest
8 голосов
/ 10 января 2011
using(DataContext db = new DataContext ())
{
    var result = db.SomeTable.ToList();
    return result;
}

Проблема в том, что после того, как я вернул результат, соединение закрыто и из-за его закрытия происходит сбой при попытке доступа к любому из дочерних элементов. Это происходит потому, что при ленивой загрузке, установленной в True (по умолчанию), он никогда не загружает дочерние отношения до того, как они используются, и я начинаю использовать их ПОСЛЕ закрытия соединения. Так как же это лучше всего решить?

Я попытался отключить отложенную загрузку, но затем он не загрузил ни одну из дочерних таблиц отношений.

Ответы [ 2 ]

14 голосов
/ 10 января 2011

Вы всегда можете явно загрузить свои дочерние коллекции:

var result = db.SomeTable.Include("SomeChildCollectionName")
                         .Include("AnotherChildCollectionName")
                         .ToList();
3 голосов
/ 10 января 2011

Вы можете использовать метод .include ().

var result = db.SomeTable.Include("ChildEntitySet").ToList();

Вы также можете добавить result.ChildEntitySet.Load() вызов перед возвратом. Это менее эффективно, так как приведет к двум поездкам на сервер. Использование метода .Include () создаст инструкцию SQL с JOIN, разрешающую только одну поездку на сервер.

...