Entity framework core 一个API调用检索模型中的所有项

Entity framework core 一个API调用检索模型中的所有项,entity-framework-core,asp.net-core-2.0,Entity Framework Core,Asp.net Core 2.0,我使用NETCore2.2创建了一个简单的WebAPI。我在下面有一个api控制器,它有一个特定的地下城 它以JSON的形式返回一个地下城,但它不会返回与地下城相关联的怪物列表 这是我的控制器: // GET: api/DungeonLists/5 [HttpGet("{id}")] public async Task<ActionResult<DungeonList>> GetDungeonList(Guid id) {

我使用NETCore2.2创建了一个简单的WebAPI。我在下面有一个api控制器,它有一个特定的地下城

它以JSON的形式返回一个地下城,但它不会返回与地下城相关联的怪物列表

这是我的控制器:

    // GET: api/DungeonLists/5
    [HttpGet("{id}")]
    public async Task<ActionResult<DungeonList>> GetDungeonList(Guid id)
    {
        var dungeonList = await _context.DungeonList.FindAsync(id);

        if (dungeonList == null)
        {
            return NotFound();
        }

        return dungeonList;
    }
我希望JSON也能显示与地下城相关的怪物列表

有办法做到这一点吗?或者我需要进行单独的API调用吗


谢谢

您需要将代码更改为以下内容:

[HttpGet("{id}")]
public async Task<ActionResult<DungeonList>> GetDungeonList(Guid id)
{
    var dungeonList = await _context.DungeonList
                                    .Include(i => i.MonsterList)
                                    .FirstOrDefaultAsync(p => p.Id = id);

    if (dungeonList == null)
    {
        return NotFound();
    }

    return dungeonList;
}

此外,由于您没有使用LazyLoading,因此您不需要MonsterList集合中的[virtual]

不确定我是否理解这个问题。如果你想在结果中包含MonterList,那么就这样吧。@IvanStoev我错误地认为在地下城列表的类模型中包含MonsterList意味着它也会被填充。就像每一个拥有相同地下城ID的怪物都会被包含一样,这是EF Core的一个常见错误——如果没有特别要求加载相关数据,它不包括加载相关数据。阅读文档主题是必须的:
    public partial class MonsterList
{
    public string MonsterId { get; set; }
    public Guid DungeonId { get; set; }
    public string MonsterName { get; set; }
    public byte? MonsterType { get; set; }
    public bool IsBossMonster { get; set; }

    public virtual DungeonList Dungeon { get; set; }
}
[HttpGet("{id}")]
public async Task<ActionResult<DungeonList>> GetDungeonList(Guid id)
{
    var dungeonList = await _context.DungeonList
                                    .Include(i => i.MonsterList)
                                    .FirstOrDefaultAsync(p => p.Id = id);

    if (dungeonList == null)
    {
        return NotFound();
    }

    return dungeonList;
}