C# EF核心收集负载。。收藏
使用EF Core 1.1.0 我有一个模型,它有集合,而集合本身也有集合C# EF核心收集负载。。收藏,c#,entity-framework-core,navigation-properties,C#,Entity Framework Core,Navigation Properties,使用EF Core 1.1.0 我有一个模型,它有集合,而集合本身也有集合 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 st
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;}
}
现在让我们假设我已经加载了一个,而1%恰好是我关心的B。我们还没有延迟加载,但上一个版本确实给了我们显式加载。太棒了
context.Entry(A).Collection(a=>a.Bees).Load();
问题似乎是,没有一种方法可以将额外的集合包含在B中?除了使用.Include.thenclude.thenclude.Etc重新加载外,我是否别无选择?幸运的是,您有一个选项。您可以使用
Query
方法,而不是直接调用Load
,并根据需要应用尽可能多的Include
/然后Include
对于您的示例,应该是这样的:
context.Entry(A).Collection(a => a.Bees)
.Query()
.Include(b => b.Seas).ThenInclude(c => c.Sigh)...
.Load();
您可以创建Queryable的实例,然后添加对Include的调用,然后在调用ToList方法之前添加Include,您试过了吗?我实际上忘记了这一点,谢谢提醒:)它在EF6中也有效。谢谢。。这就成功了。我希望他们能尽快完成惰性加载,但在此期间,这类事情让我可以在我的存储库中创建自己的惰性模式。嗨@Gert,你不可能忘记什么:)干杯,HNY!这不适用于延迟加载代理,或者通常仅适用于EF Core 3吗?如果我这样做,它会说集合未加载。只有当我省略了.Collection(…)和.Load()之间的所有内容时,才会说它已加载:@Tagc和延迟加载-可能不会。对于加载相关数据的其他方法-是的,它可以工作,它们不使用
IsLoaded
标志,EFC5 filtered includes也一样,这允许您只加载很少的记录,然后是否加载?显然不是。因此,基本上您不应该依赖于该标志,并且通常应该避免延迟加载,因为它有很多副作用和意外行为。
context.Entry(A).Collection(a => a.Bees)
.Query()
.Include(b => b.Seas).ThenInclude(c => c.Sigh)...
.Load();