如何使用 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 创建具有子类别的类别表? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Code-First EF 4.1 从数据库中删除多个项目