web-dev-qa-db-ja.com

EntityFrameworkでの自己参照/親子関係

依存操作の有効な順序を決定できません。外部キーの制約、モデル要件、またはストアで生成された値が原因で依存関係が存在する可能性があります-exception when EntityFrameworkで自己参照関係を使用します。

私は親子関係を機能させようとしています:

public class Category {
    public int CategoryId { get; set; }
    public string Name { get; set; }
    public int ParentId { get; set; }
    public Category Parent { get; set; }
    public List<Category> Children { get; set; }
}

これは私が使用する構成です(Fluent API):

Property(c => c.ParentId).IsOptional();
HasMany(c => c.Children).WithOptional(c => c.Parent).HasForeignKey(c => c.ParentId);
//HasOptional(c => c.Parent).WithMany(c => c.Children).HasForeignKey(c => c.ParentId);

HasMany()とHasOptional()の両方の構成で、次のような新しいカテゴリを保存しようとすると、「依存操作の有効な順序を判別できません...」という例外が発生します。

context.Categories.Add(new Category { Name = "test" });

EFがnullのparentIdを持つカテゴリを挿入しない理由がわかりません。データベースでは、ParentId外部キーをnullにすることができます。

これを行う方法を教えてもらえますか?

28
Julius

オプション関係の外部キープロパティとして使用するには、カテゴリクラスのParentIdをnull許容として定義する必要があります。

public int? ParentId { get; set; }

intプロパティは値nullを取ることができないため、データベース列の値としてNULLを表すことはできません。

34
Slauma