2017-08-25 64 views
-1

假设我有这个类的类。自引用表的导航属性

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

感谢您的帮助

回答

1

通过这样做如下配置:

//Navigation 
HasRequired(c => c.ParentCategory) 
    .WithMany(c => c.ChildCategories) 
    .HasForeignKey(c => c.ParentCategoryId); 

你是说,每一个创建类有一个父类,并要求家长。这不起作用,因为根目录类别没有父目录。只有子类别具有父类别。所以父类别是可选的。如果父母是必需的,将不可能插入根类别。

所以,你需要让你的ParentCategoryId财产可选(通过使用可为空值=>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);