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

简化包括和。然后在实体框架核心6中包含调用

厍彭薄
2023-03-14

我在项目中使用Entity Framework Core 6.0,我有以下代码结构:

public class Game
{
    public Team Team1 { get; set; }
    public Team Team2 { get; set; }
}
public class Team
{
    public Player Player1 { get; set; }
    public Race Race1 { get; set; }
    public Player Player2 { get; set; }
    public Race Race2 { get; set; }
}

(为简单起见,省略了其他字段)

我想加载所有游戏的所有数据,因此在我的服务类中,我会:

        var games = await _context.Games
            .Include(g => g.Team1)
                .ThenInclude(t => t.Player1)
            .Include(g => g.Team1)
                .ThenInclude(t => t.Race1)
            .Include(g => g.Team1)
                .ThenInclude(t => t.Player2)
            .Include(g => g.Team1)
                .ThenInclude(t => t.Race2)
            .Include(g => g.Team2)
                .ThenInclude(t => t.Player1)
            .Include(g => g.Team2)
                .ThenInclude(t => t.Race1)
            .Include(g => g.Team2)
                .ThenInclude(t => t.Player2)
            .Include(g => g.Team2)
                .ThenInclude(t => t.Race2)
            .ToArrayAsync();

//Collect the statistics

然而,它看起来很难看,占用了很多线。有没有办法简化这段代码?

另外,我不想在整个上下文中使用延迟加载,所以在这里它不是一个选项。

共有1个答案

苏丰茂
2023-03-14

您可以简化包括非集合导航属性:

var games = await _context.Games
    .Include(g => g.Team1.Player1)
    .Include(g => g.Team1.Race1)
    .Include(g => g.Team1.Player2)
    .Include(g => g.Team1.Race2)
    .Include(g => g.Team2.Player1)
    .Include(g => g.Team2.Race1)
    .Include(g => g.Team2.Player2)
    .Include(g => g.Team2.Race2)
    .ToArrayAsync();
 类似资料:
  • 问题内容: 我正在尝试使以下内容起作用: 导致异常的部分是: 编辑: 经过进一步观察, (在首次致电后,没有)为我完成了这项工作。 问题答案: 看来您无法对查询中的children集合进行排序。在查询之后进行排序,或者在第二个查询中加载子级。 类似的问题和答案在这里

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

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

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

  • 我有一个gradle项目,它有以下依赖关系: 并具有以下应用Spring Boot插件的功能: 我遇到的问题是,当我包含Spring Boot插件时,一个旧版本的hibernate内核似乎正在导入到我的项目中(5.0.12.Final)。但我的代码使用的是5.2.12。最终的hibernate核心库。 我不能确切地理解为什么hibernate核心库附带Spring引导插件,因为我看不到它在mave

  • 我已经找到了几个这样的帖子,但不能确定我在这里做错了什么。 我试着在两张桌子上各放一个项目。第二项包含对第一项的查找。我可以在没有问题的情况下为父级添加种子,但无法找到正确的语法来为子级添加种子。 下面是我用来种子父级的代码 下面是种子子的代码--这将失败: 根据文档的建议,我使用了一个匿名对象,而不是类本身。我也尝试过同时使用navigation属性、外键和nav道具。ID=1的组肯定已经在db