假设我有这个类别。
public class Category
{
public int Id { get; set; }
public int ParentCategoryId { get; set; }
public string CategoryName { get; set; }
public string Description { get; set; }
public Category ParentCategory { get; set; }
public List<Category> ChildCategories { get; set; }
}
不知道每个人有多少级别,我会在同一个表格中保留类别,子类别等。 ParentCategoryId
是FK。
这是配置自联接表的正确方法吗?
//Navigation
HasRequired(c => c.ParentCategory)
.WithMany(c => c.ChildCategories)
.HasForeignKey(c => c.ParentCategoryId);
感谢您的帮助
答案 0 :(得分:1)
通过执行以下配置:
//Navigation
HasRequired(c => c.ParentCategory)
.WithMany(c => c.ChildCategories)
.HasForeignKey(c => c.ParentCategoryId);
您说每个创建的类别都有父类别,而父类别是必需的。这不起作用,因为根类别没有父类。只有子类别具有父类别。父类别是可选的。如果需要父级,则无法插入根类别。
因此,您需要将ParentCategoryId
属性设为可选(使用nullable =&gt; int?
),您的实体应如下所示:
public class Category
{
public int Id { get; set; }
public int? ParentCategoryId { get; set; }
public string CategoryName { get; set; }
public string Description { get; set; }
public Category ParentCategory { get; set; }
public List<Category> ChildCategories { get; set; }
}
您的流畅配置应如下所示(请注意我使用HasOptional
方法):
HasOptional(c => c.ParentCategory)
.WithMany(c => c.ChildCategories)
.HasForeignKey(c => c.ParentCategoryId);