Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF核心收集负载。。收藏_C#_Entity Framework Core_Navigation Properties - Fatal编程技术网

C# EF核心收集负载。。收藏

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

使用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 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();