Entity framework core 一个API调用检索模型中的所有项
我使用NETCore2.2创建了一个简单的WebAPI。我在下面有一个api控制器,它有一个特定的地下城 它以JSON的形式返回一个地下城,但它不会返回与地下城相关联的怪物列表 这是我的控制器: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) {
// 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;
}