我的api没有返回完整的对象

时间:2019-05-08 08:12:17

标签: c# linq asp.net-core

我从.netcore的API开始,我有一个外键,当我执行查询时,该值为null

enter image description here

在那种情况下,我读到include是用来获取其值的,但是当我使用它时,它并不能显示表中的所有值,并且在断点处,我看到它会产生放射状的影响,并且它不会从那里过去

enter image description here

我的控制器

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

2 个答案:

答案 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;
    });