Ваша модель домена при переводе в таблицы базы данных будет противоречить принципам нормализации базы данных.
Проблема : Столбцы уровней в объекте категории будут создавать избыточность, не говоря уже об изменении моделипонадобится, если вы узнаете позже, что есть еще уровни для размещения.
Решение : Вот что я предлагаю вам:
Шаг 1. Измените свою сущностьи создайте родительские и дочерние отношения, например:
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace DomainModel
{
public class Category
{
public Category()
{
Children = new HashSet<Category>();
}
public int Id { get; set; }
[Required]
public string Name { get; set; }
public int? ParentId { get; set; }
public virtual ICollection<Category> Children { get; set; }
public virtual Category Parent { get; set; }
}
}
Родительские и дочерние отношения позволяют создавать столько уровней, сколько вам нужно.Если категория не принадлежит уровню (другими словами, это корневая категория), ее родитель будет нулевым.
Шаг 2. В методе OnModelCreating () вашего DbContext class, укажите отношение следующим образом:
modelBuilder.Entity<Category>()
.HasMany(e => e.Children)
.WithOptional(e => e.Parent)
.HasForeignKey(e => e.ParentId);
Конечная таблица в базе данных будет выглядеть следующим образом:
