我从.netcore的API开始,我有一个外键,当我执行查询时,该值为null
在那种情况下,我读到include是用来获取其值的,但是当我使用它时,它并不能显示表中的所有值,并且在断点处,我看到它会产生放射状的影响,并且它不会从那里过去
我的控制器
public class ComidasController : ControllerBase
{
private readonly testcoreContext _context;
public ComidasController(testcoreContext context)
{
_context = context;
}
// GET: api/Comidas
[HttpGet]
public List<Comida> GetComida()
{
var prueba =_context.Comida.ToList();
return prueba;
}
// GET: api/Comidas/5
[HttpGet("{id}")]
public async Task<ActionResult<Comida>> GetComida(int id)
{
var comida = await _context.Comida.FirstOrDefaultAsync(x=> x.Id==id);
if (comida == null)
{
return NotFound();
}
return comida;
}
我的课程
{
public partial class Comida
{
public int Id { get; set; }
public string Name { get; set; }
public int? Type { get; set; }
public virtual Types TypeNavigation { get; set; }
}
}
public partial class Types
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Comida> Comida { get; set; }
}
答案 0 :(得分:0)
您的完整对象包含循环依赖项。在这种情况下,首选使用数据传输对象(DTO)。但是,您可以使用匿名类型:
await _context.Comida.Where(x=> x.Id==id)
.Select(comida => new {
id= comida.Id,
name= comida,Name,
type= comida.Type,
typeNavigation= comida.TypeNavigation })
.FirstOrDefaultAsync();
答案 1 :(得分:0)
就像ilkerkaran所说的那样,您在JSON中得到了循环依赖,您可以通过将以下内容添加到启动中来告诉您的应用忽略它。
services.AddMvc()
.AddJsonOptions(options => {
options.SerializerSettings.ReferenceLoopHandling =
Newtonsoft.Json.ReferenceLoopHandling.Ignore;
});