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

感謝。ルートカテゴリに親がないため、これは機能しません。サブカテゴリにのみ親カテゴリがあります。親カテゴリはオプションです。 parentが必要な場合は、ルートカテゴリを挿入することはできません。

ですから、(=>int? NULL可能を使用して)あなたのParentCategoryIdプロパティをオプションにする必要があり、あなたのエンティティは次のようになります。

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); 
関連する問題