Можно ли стремиться загрузить дерево с Entity Framework на уровне? - PullRequest
0 голосов
/ 29 апреля 2019

Я использую Entity Framework 6 для загрузки древовидной структуры.Из-за количества уровней в дереве я не хочу использовать много включений, поскольку перекрестный продукт будет слишком большим.Я использую здесь меньший пример для объяснения.

public class Hospital 
{ 
    public virtual List<Station> Stations {get;set;}
    public virtual Contact Contact {get;set;}
    public virtual string Uid {get;set;}
}

public class Station
{ 
    public virtual List<Patient> Patients {get;set;}
    public virtual Contact Contact {get;set;}
}

public class Patient
{ 
    public virtual List<Medication> Medications{get;set;}
    public virtual string Name {get;set;}
}

Я пытался сделать что-то вроде этого:

var hospital = context.Hospitals
                      .Include(h => h.Contact)
                      .Where(h => h.Uid == myUid);
var stations = hospital.SelectMany(h => h.Stations).Include(s => s.Contact);
var patients = stations.SelectMany(s => s.Patients);
var medications = patients.SelectMany(p => p.Medications);

var myHospital = hospital.Single();
stations.ToList();
patients.ToList();
medications.ToList();

В моем понимании это должно выдать 4 запроса, а структура сущности должнаисправить ассоциации в памяти.Несмотря на то, что были выполнены 4 запроса, я заметил, что Entity Framework по-прежнему загружается медленно, когда пытался перемещаться по дереву в памяти.похоже, это не относится к списку станций, но к листовым уровням (например, пациент, лекарства, ...)

Также я заметил, что если я отключу ленивую загрузку, я могу легко перемещаться по дереву ужепоэтому данные уже должны быть загружены.Однако я бы предпочел не отключать отложенную загрузку.

Может кто-нибудь объяснить мне, почему EF отложенно загружает уже загруженные свойства?

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