2017-08-25 84 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);