如何使用 EF Core 代码优先创建具有子类别的类别 table?

How to create a category table that has SubCategories using EF Core Code-First?

我创建了一个名为“类别”的简单 table。每个类别可以有一个或多个子类别,也可以没有类别。

我无法在 ASP.NET 中使用 EF 核心代码优先来完成此操作 5. 你介意帮我完成这个 table 吗?

public int Id {get;set;}
public string Title {get;set;}
public int? parentId {get;set;}

如何设置关系?

我建议设置 2 tables (类)

class Category {
    public int Id {get; set;}
    public string Title {get; set;}
}

然后是另一个:

class SubCategory {
    public int Id {get;set;}

    public int CategoryId {get;set;}

    [ForeignKey(nameof(CategoryId))]
    public Category Category {get;set}

    public string SubCategoryTitle {get;set;}
}

更多信息见Data Annotations in EF Core

编辑:这是正确的,当在路上的某个时间点 Category 可能与 SubCategory 具有不同的字段。如果不是,那么自引用 table 将是一种更好的方法,就像 Johnathan Barclay 和 Serge 所建议的那样。

试试这个

 public class Category
    {
        public int Id { get; set; }
        public string Name { get; set; }

        public int? ParentId { get; set; }
        public virtual Category Parent { get; set; }

        public virtual ICollection<Category> Children { get; set; }

}

和数据库上下文

 public virtual DbSet<Category> Categories { get; set; }
.....

 modelBuilder.Entity<Category>()
            .HasOne(s => s.Parent)
            .WithMany(m => m.Children)
            .HasForeignKey(e => e.ParentId);

所以你想要一对多的关系(类别有很多子类别)。

试试下面的代码:-

public class Category{

public int Id { get; set; }
public string Title {get;set;}
public List<SubCategory> SubCategories{ get; set; }

}
public class SubCategory
{
    public int Id { get; set; }

    public string Text { get; set; }

    //Navigation
    public int CategoryId { get; set; }

    public Category Category{ get; set; }

}