LazyLoadingEnabled false не работает - PullRequest
0 голосов
/ 07 июня 2018

Я очень смущен, и мне нужна помощь в понимании отложенной загрузки.Я думал, что настройка отложенной загрузки false приведет к загрузке всего объекта, включая дочерние элементы, но это не происходит для меня.Просматривая другие вопросы, я не мог найти адекватного ответа.

Сервер содержит список супервизоров, а каждый супервизор содержит список соединительных линий.

using (var db = new ProjectDatabase())
{
        db.Configuration.LazyLoadingEnabled = false;

        var dbServer = db.Servers.Include("Supervisors.Trunks").Single(s => s.Name == ArchiveName);

        Console.WriteLine(dbServer.Supervisors.SelectMany(s=>s.Trunks).Count());
}

Приведенный выше код записывает 3 в строку консоли, что ожидается, поскольку сервер содержит 3супервизоры и каждый супервизор содержит 1 ствол.

using (var db = new ProjectDatabase())
{
        db.Configuration.LazyLoadingEnabled = false;

        var dbServer = db.Servers.Single(s => s.Name == ArchiveName);

        Console.WriteLine(dbServer.Supervisors.SelectMany(s=>s.Trunks).Count());
}

Этот код (такой же, как первый, но без оператора include) записывает 0 в консоль.Я думал, что LazyLoadingEnabled = false будет загружать все супервизоры и транки автоматически.Мне нужны десятки различных типов дочерних объектов, поэтому я надеюсь на элегантное решение, которое не требует тонны операторов включения.Пожалуйста, помогите.

1 Ответ

0 голосов
/ 07 июня 2018

Вы, кажется, что-то путаете.

LazyLoadingEnabled = false;

отключает всю отложенную загрузку.Вам нужно

LazyLoadingEnabled = true;

Он сообщает EF загрузить все необходимые навигационные свойства, которые используются (в тот момент, когда вы их вызываете), и которые раньше не использовались.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...