Хорошо, но что, если я хочу загрузить ВСЕ дочерние элементы без необходимости явной записи include ("ElementName")? Есть много дочерних элементов, поэтому

using(DataContext db = new DataContext ())
{
    var result = db.SomeTable.ToList();
    return result;
}

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

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

Ответы на вопрос(2)

Решение Вопроса

var result = db.SomeTable.Include("SomeChildCollectionName")
                         .Include("AnotherChildCollectionName")
                         .ToList();
 syncis10 янв. 2011 г., 15:54
Ах, хорошо, большое спасибо!
 syncis10 янв. 2011 г., 15:49
Хорошо, но что, если я хочу загрузить ВСЕ дочерние элементы без необходимости явной записи include ("ElementName")? Есть много дочерних элементов, поэтому
 Justin Niessner10 янв. 2011 г., 15:50
@ user554978 - Это не поддерживается. Вы должны явно загрузить все дочерние элементы заранее, используя Включить или оставить соединение открытым и позволить Lazy Loading делать свое дело.

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

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

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

 syncis10 янв. 2011 г., 15:49
Хорошо, но что, если я хочу загрузить ВСЕ дочерние элементы без необходимости явной записи include ("ElementName")? Есть много дочерних элементов, поэтому

Ваш ответ на вопрос