Ошибка Ajax при включении связанных данных EF Core - PullRequest
0 голосов
/ 28 мая 2019

Вот мои модели

  [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 с помощью простого выбора и соединения, и я могу получить все данные ...

UPDATE

ОК, почему-то это не дает мне исключения. Обычно это показывало бы исключение на стороне сервера о исключении циклической ссылки при загрузке определенных объектов непосредственно из контекста в 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.

...