2017-01-08 54 views
3

使用EF核心1.1.0EF Core Collection负载..集合

我有一个模型,其集合本身具有集合。

public class A { 
    public string Ay {get;set;}  
    public List<B> Bees {get;set;} 
} 

public class B { 
    public string Be {get;set;} 
    public List<C> Seas {get;set;} 
} 

public class C { 
    public string See {get;set;} 
    public bool InDark {get;set;} 
    public List<D> Sigh {get;set;} 
} 

现在.. A是巨大的,99%的时间我不关心B,所以它不会被加载。如果我没有加载它,那么它会是这样的:

context.A.Include(a=>a.Bees).ThenInclude(b=>b.Seas).ThenInclude(c=>c.Sigh)... 

现在让我们假设我已经有了一个装起来和1%的情况,我关心B.我们没有延迟加载但是,最后一个版本确实给了我们明确的加载。真棒。

context.Entry(A).Collection(a=>a.Bees).Load(); 

问题似乎是没有办法在B中包含额外的集合?除了使用.Include.ThenInclude.ThenInclude.Etc重新加载A,我是否别无选择?

+0

您可以创建可查询的实例,然后添加调用为ThenInclude之前,包括和调用ToList方法,你试过吗? –

回答

5

幸运的是你有一个选项。您可以使用Query方法而不是直接调用Load,并根据需要应用尽可能多的Include/ThenInclude

为您的样品,这将是这样的:

context.Entry(A).Collection(a => a.Bees) 
    .Query() 
    .Include(b => b.Seas).ThenInclude(c => c.Sigh)... 
    .Load(); 
+1

我实际上已经忘记了这一点,谢谢你提醒我:)它也适用于EF6。 –

+0

谢谢..这个伎俩。我希望他们迟早加载完成,但在此期间,这种事情让我可以在我的存储库中创建自己的懒惰模式。 – imukai

+0

嗨@Gert,没办法,你可以忘记一些事情:)干杯和HNY! –