2016-10-10 6 views
2

Microsoft.EntityFrameworkCore.Sqlite v1.0.1を使用しています。 これは私の実体である:Entity Frameworkコア自己参照オプションプロパティ

public class Category 
{ 
    public int CategoryId { get;set;} 
    public Category ParentCategory { get; set; } 
    public int? ParentCategoryId { get; set; } 
    public string Name { get; set; } 
    public DateTime DateCreated { get; set; } 
    public DateTime DateModified { get; set; } 
} 

は、だから私は、オプションのプロパティとしてParentCategoryを設定する必要があります。 EFコアでこれを行うにはどうすればいいですか? これは今まで私の流暢マッピングです:

modelBuilder.Entity<Category>(e => 
{ 
    e.HasKey(c => c.CategoryId); 

    e.Property(c => c.DateCreated).ValueGeneratedOnAdd(); 
    e.Property(c => c.DateModified).ValueGeneratedOnAddOrUpdate(); 
}); 

答えて

3

あなたParentCategoryIdは、それがNULL可能であるという事実に基づいて、すでにオプションです。それがヌル可能でないならば、それは必要であろう。さらに設定する必要はありません。

CategoryのキーにCategoryIdを設定する必要はありません。すでにエンティティキーの命名規則に従っているため、キーとして設定されます。

+0

EFは、nullable ParentCategoryIDがプロパティの外部キーであることを認識しますか? –

+0

それはすべきです - 私は自己参照関係についてまだEFコアでテストしていませんが、私の[EF6記事](http://www.mikesdotnetting.com/article/255/entity-フレームワーク - レシピ - 階層データ管理)が機能します。安全な側にするために、 'ParentCategory'の名前を' Parent'に変更し、 'Children'プロパティを' List 'に追加することをお勧めします。 –

+0

申し訳ありません、あなたのtippsありがとう、私はこれをテストします! –