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

如何在EF中包含对象的所有级别?[重复]

姚乐家
2023-03-14

我有一个定义网络结构的对象,我想发送该对象的所有子对象和子对象的子对象,等等。

现在我有这个:

var Data = await _context.Scans
                .Include(c => c.networkDevices)
                .ThenInclude(d => d.ports)
                .ThenInclude(p => p.Service)
                .Include(c => c.root)
                .ThenInclude(d => d.children).ThenInclude(p => p.children).ThenInclude(c => c.children)
                .ToListAsync();
            return Data;

这段代码将获得大部分级别,但如果网络有许多不同的层,则不会获得所有级别。我如何才能使其包含所有层。

共有2个答案

司寇琨
2023-03-14

我认为实现这一点最简单的方法是通过延迟加载,看看这篇文章

子车睿
2023-03-14

我认为没有内置的方式来加载“所有”层,因为在理论上,你可能有循环引用。

此代码段将创建层数查询

namespace System.Data.Entity
{
  using Linq;
  using Linq.Expressions;
  using Text;

  public static class QueryableExtensions
  {
    public static IQueryable<TEntity> Include<TEntity>(this IQueryable<TEntity> source,
      int levelIndex, Expression<Func<TEntity, TEntity>> expression)
    {
      if (levelIndex < 0)
        throw new ArgumentOutOfRangeException(nameof(levelIndex));
      var member = (MemberExpression)expression.Body;
      var property = member.Member.Name;
      var sb = new StringBuilder();
      for (int i = 0; i < levelIndex; i++)
      {
        if (i > 0)
          sb.Append(Type.Delimiter);
        sb.Append(property);
      }
      return source.Include(sb.ToString());
    }
  }
}

用法:

var children = await DbContext.Roots
  .Include(3, a => a.Children)
  .SingleOrDefaultAsync(a => a.Id == 5);
 类似资料:
  • 问题内容: 当编译我们的项目,我们创建几个档案(静态库),说和每个包含定义函数的对象文件和。然后,将这些归档文件合并到一个共享对象中,例如,这是我们的主要可分发目标之一。 例如,在示例程序中使用此共享库时,链接失败,因为未定义对函数和的引用。 但是,当我直接将最终的可执行文件与归档文件(静态库)链接时,它可以工作。 我的猜测是,归档中包含的目标文件未 链接 到共享库中,因为它们没有在共享库中使用。

  • 本文向大家介绍window.location 对象所包含的属性,包括了window.location 对象所包含的属性的使用技巧和注意事项,需要的朋友参考一下 hash//从井号 (#) 开始的 URL(锚) host//主机名和当前 URL 的端口号 hostname//当前 URL 的主机名 href//完整的 URL pathname//当前 URL 的路径部分 port//当前 URL 的

  • 问题内容: 如何Foo从Java访问包对象中包含的对象? 问题答案: 也许从Scala 2.8.1开始,这已经发生了变化,但是该提议不起作用。您必须使用。 对于对象,方法等,它有所不同。考虑到scala类: 您可以访问foo,bar而baz在Java中,如: 当我试图弄清楚这一点时,我以为我们遇到了麻烦,因为Scala生成了一个名为的类,当然您不能在Java中导入该类。幸运的是,我们只需要pack

  • 有没有办法轻松克隆一个有说服力的对象,包括它的所有关系? 例如,如果我有以下表格: 除了在表中创建新行(除外,所有列都相同)外,还应在表中创建新行,将相同的角色分配给新用户。 像这样的东西: 其中用户模型具有

  • 我正在使用和。 我正在努力获取子对象的子对象来填充。下面是我的课。 应用程序类; 子类: ChildRelationshipType类: 存储库中GetAll方法的一部分,以返回所有应用程序: 子类包含对ChildRelationshipType类的引用。要处理应用程序的子级,我需要这样做: 我在这里得到一个错误,即对象上下文已经关闭。 如何指定每个子对象必须包括对象,就像我上面所做的那样?

  • 问题内容: 好的,这是一个棘手的问题。我有一套清单。我想按顺序对集合中的对象进行排序。 想象每个场景都压抑着学校的一堂课。每个集合包含人物对象。人员对象具有名称的字符串值。在遍历并写下来之前,我想按名称排列集合中的人物。 是否有任何使用或类似的方法可以实现此目的? 我确实知道班上2个以上的孩子可能使用相同的名字,但请忽略此 问题答案: A 没有 排序的 概念,因为它是一个集合。 您可以使用按类实现