当前位置: 首页 > 知识库问答 >
问题:

实体框架核心-包含集合属性的多个级别[重复]

马宜民
2023-03-14
public class A
{
    public ICollection<B> listB ...
}

public class B
{
    public C c ...
}
var wtv = Context.AItems.Include(a => a.listB).ThenInclude(b => b. )

我只能访问ICollection本身(listB)的属性,而不能访问其中包含的B对象的属性,这样我就可以在其中包含C对象。

我设法手动完成这一操作(这比我希望的要详细得多),分别加载对象并在其中包含我想要的内容,然后才将它们添加到a的列表中。然而,在我的现实生活中,我想在下面的级别中包含的属性也是用于集合的,所以这变得越来越不实用。有没有更简单、更优雅的方法呢?

共有1个答案

邴宏大
2023-03-14

theninclude有两个重载,一个用于前面的导航属性是单个实体的情况,另一个用于集合:

public static IIncludableQueryable<TEntity, TProperty> ThenInclude<TEntity, TPreviousProperty, TProperty>([NotNullAttribute] this IIncludableQueryable<TEntity, TPreviousProperty> source, [NotNullAttribute] Expression<Func<TPreviousProperty, TProperty>> navigationPropertyPath) where TEntity : class;

public static IIncludableQueryable<TEntity, TProperty> ThenInclude<TEntity, TPreviousProperty, TProperty>([NotNullAttribute] this IIncludableQueryable<TEntity, IEnumerable<TPreviousProperty>> source, [NotNullAttribute] Expression<Func<TPreviousProperty, TProperty>> navigationPropertyPath) where TEntity : class;

您应该可以像这样使用它:

Context.AItems.Include(a => a.listB).ThenInclude(b => b.c)

来自Microsoft文档:

 类似资料:
  • 将只填充Enabled属性(下图),而不填充Application或CustomVariableGroup属性(下图)。我该怎么做?

  • 我想使用即时加载在实体框架核心中获得多个嵌套级别的子表。我认为延迟加载还没有实现。 我找到了EF6的答案。 我的问题是,EF Core中无法识别选择 错误CS1061“雇员”不包含“选择”的定义,并且找不到接受“雇员”类型的第一个参数的扩展方法“选择”(您是否缺少使用指令或程序集引用?) 我包含的命名空间: EF Core中的选择选项是什么。

  • 我有一个ASP MVC.NET核心(C#)项目,由于业务原因,SQL表不能有外键,因此,EF模型不映射关系(Entity.HasMany...)。 假设EF为实体生成一个模型,为生成一个模型。我想知道他们两个之间的关系。一个有多个并且一个属于一个。该任务在数据库中有项目Id(但请记住,它没有设置为FK)。 现在,我想通过to Entity获得一个项目列表,同时获得每个项目的任务列表。我通过创建一个

  • 我是EF core的新手,我正在尝试让它与我的ASP一起工作。NET核心项目。 当尝试配置以使用配置中的连接字符串时,我在我的中得到上述错误。我正在遵循本教程。 问题代码在启动中。cs: 如果我将方法直接放入上下文中,则可以识别它: 我在网上的所有研究都指向缺失的参考文献,但我似乎无法找出我缺失的是哪一个(见图)。

  • 我在项目中使用Entity Framework Core 6.0,我有以下代码结构: (为简单起见,省略了其他字段) 我想加载所有游戏的所有数据,因此在我的服务类中,我会: 然而,它看起来很难看,占用了很多线。有没有办法简化这段代码? 另外,我不想在整个上下文中使用延迟加载,所以在这里它不是一个选项。

  • 问题内容: 使用实体框架返回人名列表,其中人名包含字符串数组中的文本。 比方说: 和查询 这将编译并运行,但是该过程实际上是从数据库中调用所有记录,然后对返回的数据执行我的where子句。这是有道理的。 有没有一种方法可以重写查询,以便在SQL中生成where子句? 问题答案: 我假设dataContext.People是来自的,并且不涉及实现的指令,例如或。 答案在这里:http : //www