如何使用 EF Core Code-First 创建具有子类别的类别表? [复制]

Posted

技术标签:

【中文标题】如何使用 EF Core Code-First 创建具有子类别的类别表? [复制]【英文标题】:How to create a category table that has SubCategories using EF Core Code-First? [duplicate] 【发布时间】:2021-09-03 15:09:08 【问题描述】:

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

我无法在 ASP.NET 5 中使用 EF 核心 Code-First 来完成。您介意帮我完成这张表吗?

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

如何设置关系?

【问题讨论】:

【参考方案1】:

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

试试下面的代码:-

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; 


    

【讨论】:

【参考方案2】:

试试这个

 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);

【讨论】:

【参考方案3】:

我建议设置 2 个表(类)

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 不同的字段。如果不是,那么像 Johnathan Barclay 和 Serge 建议的那样,自引用表将是一种更好的方法。

【讨论】:

以上是关于如何使用 EF Core Code-First 创建具有子类别的类别表? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 EF Code-First 插入/更新可更新视图

EF Code-First如何使用复合键从表中读取A.

如何使用 Code-First EF 4.1 从数据库中删除多个项目

使用ef core的迁移功能并配置种子数据

如何将时态表添加到 EF Code-First DBContext?

EF Code-First 中的种子方法