是否有可能渴望通过实体框架逐级加载树?

时间:2019-04-29 14:47:39

标签: entity-framework entity-framework-6 eager-loading

我正在使用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惰性加载已加载的属性吗?

0 个答案:

没有答案