包括相关数据EF Core时的Ajax错误

时间:2019-05-28 13:50:33

标签: javascript jquery asp.net-core-2.2 entity-framework-core-2.2

这是我的模特

  [Table(name: "hListasAbastecimento")]
    public class ListaAbastecimento
    {
        public ListaAbastecimento()
        {
            DataCriacao = DateTime.Now;
        }

        public ListaAbastecimento(string uap, int colaboradorId)
        {
            UAP = uap;
            ColaboradorId = colaboradorId;
            DataCriacao = DateTime.Now;
        }

        public int Id { get; set; }
        public int ColaboradorId { get; set; }   
        [ForeignKey("ColaboradorId")]
        public virtual Colaborador Colaborador { get; set; }

        public string UAP { get; set; }
        public DateTime DataCriacao { get; set; }

        public virtual ICollection<ReferenciaAbastecimento> Referencias { get; set; }
    }

 [Table(name: "hReferenciasAbastecimento")]
    public class ReferenciaAbastecimento
    {
        public int Id { get; set; }

        [MaxLength(15)]
        public string Referencia { get; set; }
        public int? QtdAbastecimento { get; set; }
        public int? QtdCaixas { get; set; }
        public int? QtdPecasPorCaixa { get; set; }

        public int ListaAbastecimentoId { get; set; }
        [ForeignKey("ListaAbastecimentoId")]
        public ListaAbastecimento ListaAbastecimento { get; set; }
    }

这是ajax调用

       $.ajax({
            url: "/Account/Abastecimentos/Index?handler=Abastecimentos",
            type: "GET",                
            success: function (response) {
                alert('success');
            },
            error: function (response) {
                alert('error');
            }
        });

这是页面方法

        public async Task<IActionResult> OnGetAbastecimentosAsync()
    {
        var abastecimentosList = await _context.ListasAbastecimento
            .Include(la => la.Referencias)
            .ToListAsync();

        return new JsonResult(abastecimentosList);
    }

我设法找出该错误是由于包含Referencias而引起的,这意味着如果我这样做就可以了

    public async Task<IActionResult> OnGetAbastecimentosAsync()
    {
        var abastecimentosList = await _context.ListasAbastecimento
            .ToListAsync();

        return new JsonResult(abastecimentosList);
    }

首先,我认为这不是导致模型上虚假的原因,但我尝试将其删除,但错误仍然发生。

我可以通过简单的选择和连接就可以在SQL中很好地运行查询,并且可以获得所有数据...

更新

好的,出于某种原因,这不会给我一个例外。通常,当将某些实体直接从上下文加载到JSON时,它将向服务器端异常显示有关循环引用异常的信息。除了这次,它唯一显示给我的是一个未完成的json。

我最终映射到视图模型,以避免导航属性的循环引用问题

 try
        {

            var abastecimentosList = await _context.ListasAbastecimento
                .Include(la => la.Colaborador)
                .Include(la => la.Referencias)
                .ToListAsync();

            var list = _mapper.Map<List<ListaAbastecimento>, List<ListaAbastecimentoViewModel>>(abastecimentosList);


            return new JsonResult(list);
        }
        catch(Exception ex)
        {
            return NotFound();
        }

这将立即触发ajax成功功能。因此,基本上,问题在于为什么除了返回错误的json之外没有触发异常。

0 个答案:

没有答案