Ядро Ef удаляет дочерний элемент с нулевым значением

#asp.net-core #entity-framework-core

#asp.net-core #entity-framework-core

Вопрос:

Ниже приведена моя иерархическая модель

 public class MenuModel
{
    public int Id { get; set; }
    public string Name { get; set; } = null!;
    public string? Url { get; set; } = null!;
    public string? Icon { get; set; }
    public int? ParentId { get; set; }
    public MenuModel Parent { get; set; } = null!;
    public ICollection<MenuModel>? Children { get; set; } = new List<MenuModel>();
}
  

Запрос:

 return await _context.Menus//.Include(o => o.Parent)
                             .Include(m => m.Childrens)
                             .ThenInclude(m => m.Childrens)
                             .Where(m => m.ParentId == null)
                             .ToListAsync();
  

Запрос работает нормально: как исключить меню без дочерних элементов

Пожалуйста, проверьте ниже..

введите описание изображения здесь

Я добавил в конфигурацию

 services.AddControllers()
    .AddNewtonsoftJson(options =>
    {
        options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
    })
    .AddJsonOptions(options => {
        options.JsonSerializerOptions.IgnoreNullValues = true;
    });
  

Но в файле json это происходит.. Можно ли исключить в самом ядре ef? Я использую последнюю версию предварительного просмотра ядра EF.

РЕДАКТИРОВАТЬ: сам Ef считается с отображением 0..Как избежать count = 0?

введите описание изображения здесь

Ответ №1:

Вы присваиваете свойству значение по умолчанию Children , поэтому вы всегда видите его в своем ответе. Чтобы исправить это, просто измените = new List<MenuModel>(); на = null!;

 public class MenuModel
{
    ...
    public ICollection<MenuModel>? Children { get; set; } = null!;
}
  

Комментарии:

1. Спасибо .. но я уже удалил и это. я использую меню автоматической карты для отображения в menumodel .. это может быть причиной?