一个API调用即可检索模型中的所有项目

时间:2019-07-16 16:05:21

标签: entity-framework-core asp.net-core-2.0

我使用Net Core 2.2创建了一个简单的Web api。我下面有这个api控制器,它有一个特定的地牢。

它以JSON形式返回地牢,但没有返回与地牢相关的MonsterList。

这是我的控制器:

    // 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;
    }

这是我的地牢模型。如您所见,它有一个MonsterList。

    public partial class DungeonList
{
    public DungeonList()
    {
        MonsterList = new HashSet<MonsterList>();
    }

    public Guid DungeonId { get; set; }
    public string DungeonName { get; set; }
    public string DungeonDesc { get; set; }
    public string MapArea { get; set; }
    public bool ShowProgress { get; set; }
    public bool? DungeonResumable { get; set; }

    public virtual ICollection<MonsterList> MonsterList { get; set; }
}

这是我的MonsterList模型:

    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; }
}

我希望JSON还显示与地牢关联的怪物列表。

有没有办法做到这一点?还是我需要进行单独的API调用?

谢谢!

1 个答案:

答案 0 :(得分:0)

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

[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]