如何使用 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; }
}
我创建了一个名为“类别”的简单 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; }
}