c# – 如何使用Entity Framework Core加载相关实体

我正在使用Entity Framework Core进行探索,并在阅读本指南
https://docs.efproject.net/en/latest/platforms/aspnetcore/new-db.html时使用代码优先方法开始,但不同的模型除外.

在EF6中,它有延迟加载,我能够轻松地拉动相关实体,但它在EF Core中无效.我想知道如何使这个工作或如果有一个工作来使它工作.

以下是我的两个模型的示例:

public class Team
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string Icon { get; set; }
    public string Mascot { get; set; }
    public string Conference { get; set; }
    public int NationalRank { get; set; }

    public List<Game> Games { get; set; }
}

public class Game
{
    public string Id { get; set; }
    public string Opponent { get; set; }
    public string OpponentLogo { get; set; }
    public string GameDate { get; set; }
    public string GameTime { get; set; }
    public string TvNetwork { get; set; }
    public string TeamId { get; set; }

    public Team Team { get; set; }
}

我想要为团队获得所有游戏但是现在它是空的.

我决定制作一个Web Api项目,所以我有一个名为TeamsController的控制器,当我向控制器发出GET请求时,我希望得到一个团队列表,其中包含填充了相关游戏的游戏属性.

这是我尝试过的:

[HttpGet]
public async Task<List<Team>> Get()
{
    return await _context.Teams.Include(t => t.Games).ToListAsync();
}

这是JSON结果:

[
  {
    "id": "007b4f09-d4da-4040-be3a-8e45fc0a572b",
    "name": "New Mexico",
    "icon": "lobos.jpg",
    "mascot": "New Mexico Lobos",
    "conference": "MW - Mountain",
    "nationalRank": null,
    "games": [
      {
        "id": "1198e6b1-e8ab-48ab-a63f-e86421126361",
        "opponent": "vs Air Force*",
        "opponentLogo": "falcons.jpg",
        "gameDate": "Sat, Oct 15",
        "gameTime": "TBD ",
        "tvNetwork": null,
        "teamId": "007b4f09-d4da-4040-be3a-8e45fc0a572b"
      }
    ]
  }
]

当我这样做:

[HttpGet]
public async Task<List<Team>> Get()
{
    return await _context.Teams.ToListAsync();
}

我得到了所有的团队,但是Games属性为null.

我希望它会返回数据库中的所有团队以及每个团队的所有游戏.我怎样才能使这个工作?

最佳答案 延迟加载目前未在实体框架核心中实现为
indicated here,我建议您查看AutoMapper以在POCO中投影所需的结果.因为你想要的只会导致n 1问题.

点赞