#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 .. это может быть причиной?