6

我首先使用Entity Framework 4.1代碼,並且ASP.NET MVC 3和我正在努力正確地獲取自引用設置。我有一個類別類。它必須是自我引用的。當表中的ParentCategoryId爲空時,類別可以是父類別。如果一個類別有一個ParentCategoryId值,那麼這意味着它屬於一個父類別。實體框架4.1檢索自引用數據

我在Code Project上跟着這個article

這裏是我的分類等級:

public class Category 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public string MetaKeywords { get; set; } 
    public string MetaDescription { get; set; } 
    public bool IsActive { get; set; } 
    public virtual Category ParentCategory { get; set; } 
    public int? ParentCategoryId { get; set; } 
} 

我的上下文類:

public class PbeContext : DbContext 
{ 
    public DbSet<Category> Categories { get; set; } 

    protected override void OnModelCreating(DbModelBuilder dbModelBuilder) 
    { 
      dbModelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 

      dbModelBuilder.Entity<Category>() 
       .HasOptional(c => c.ParentCategory) 
       .WithMany() 
       .HasForeignKey(p => p.ParentCategoryId); 
    } 
} 

不知道上面是正確的嗎?

有人能幫我解決這個問題嗎?我需要的是,當我通過id查詢一個類別時,它必須帶回父類別(只在需要時加載)。它也必須加載任何子類別(僅在需要時)。我還沒有爲子類別的類別類添加一個列表。

上面的問題看起來像檢索父類別和子類別的類別?

編輯

這是我找回我的類別:

public Category GetById(int id) 
{ 
    return db 
      .Categories 
      .Find(id); 
} 

因爲ParentCategory參考可以爲空,我將如何在視圖中顯示這個?我有以下內容:

@Model.ParentCategory.Name 

..但不會給出錯誤,如果該類別沒有與其關聯的父類別?我如何在視圖中顯示它?

回答

7

如果您需要訪問子類可以集合屬性添加到模型

public class Category 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public string MetaKeywords { get; set; } 
    public string MetaDescription { get; set; } 
    public bool IsActive { get; set; } 
    public virtual Category ParentCategory { get; set; } 
    public int? ParentCategoryId { get; set; } 
    public virtual ICollection<Category> ChildCategories{ get; set; } 
} 

然後你可以設置的模型

 dbModelBuilder.Entity<Category>() 
      .HasOptional(c => c.ParentCategory) 
      .WithMany(c => ChildCategories) 
      .HasForeignKey(p => p.ParentCategoryId); 

編輯

你應該檢查ParentCategory是否爲空。

@if(Model.ParentCategory != null){ 
    <div>@Model.ParentCategory.Name</div> 
} 
+0

謝謝。你的查詢看起來像什麼來檢索數據? –

+0

請看我編輯的文章:) –

+0

@Brendan編輯答案 – Eranga