Моя модель представляет категории. Когда моя программа запускается, она извлекает все категории из базы данных SQLite и помещает их в сетку данных.
Каждая категория сама по себе может иметь родителя, но ни один родитель не является родителем какой-либо другой категории (т. е. это не бесконечное дерево вверх). Максимум — 1 уровень. Если у него есть родитель, я хочу вернуть информацию о его родителе, а также о себе. Если у него нет категории, то в столбце категории будет пусто.
Вот как выглядит моя программа WinUi 3. Там, где написано «Курица | 1», я бы хотел вместо этого сказать «Курица | Мясо», потому что 1 — это первичный ключ для категории «Мясо», подкатегорией которой является курица.
Модель:
public class IngredientCategory
{
public int Id { get; set; }
public string Name { get; set; }
public int Parent { get; set; }
public IngredientCategory(){}
public IngredientCategory(int id, string name, int parent)
{
Id = id;
Name = name;
Parent = parent;
}
}
Вы должны быть в состоянии сделать это:
public class IngredientCategory
{
public int Id { get; set; }
public string Name { get; set; }
public int? ParentId { get; set; }
public IngredientCategory Parent { get; set; }
}
public class YourDbContext: DbContext
{
public DbSet<IngredientCategory> IngredientCategories { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<IngredientCategory>()
.HasOne(c => c.Parent)
.WithMany()
.HasForeignKey(c => c.ParentId)
.IsRequired(false);
}
}
Затем вы можете запросить:
dbContext
.IngredientCategories
.Select(x => new { CategoryName = x.Name, ParentCategoryName = x.Parent?.Name });
Для добавления категорий без родителей:
dbContext.IngredientCategories.Add(new IngredientCategory
{
// Id should be auto generated
Name = "Meat"
});
Для добавления категорий с родителями:
dbContext.IngredientCategories.Add(new IngredientCategory
{
Name = "Meat",
ParentId = 2, // When Id 2 is already existing
});