Как создать дерево и сохранить его в БД

Использую EF Core и возникла необходимость построить иерархию категорий в виде дерева. Как это сделать?

Идея в том, что бы это выглядело примерно так

-Категория1

--Подкатегория1

---Подкатегория подкатегории1


Ответы (1 шт):

Автор решения: Frehzy

А в чём возникает проблема?

Создаём базовый интерфейсIEntity:

public interface IEntity
{
    public Guid Id { get; set; }

    public DateTime CreatedTime { get; set; }
}

Реализуем этот интерфейс:

public abstract class BaseEntity : IEntity
{
    [Key]
    public Guid Id { get; set; } = Guid.NewGuid();

    public DateTime CreatedTime { get; set; } = DateTime.Now;

    public BaseEntity() { }
}

Создаём класс Category:

public class Category: BaseEntity
{
    public Guid NewCategoryId { get; set; }

    [JsonIgnore]
    [ForeignKey(nameof(NewCategoryId))]
    public virtual Category NewCategory { get; set; }

    public Category() : base() { }
}

Создаём в DataContext DbSet:

public class DataContext : DbContext
{
    public DbSet<Category> Categories { get; set; }

    public DataContext(DbContextOptions<DataContext> options) : base(options)
    {
    }
}

UPD:

Предложение по улучшению @Aarnihauta:

public class Category: BaseEntity
{
    [JsonIgnore]
    [ForeignKey(nameof(Id))]
    public virtual ICollection<Category> NewCategories { get; set; }

    public Category() : base() { }
}
→ Ссылка