EF 7:INSERT文がFOREIGN KEY SAME TABLEと競合しました

asp.net-mvc c# entity-framework entity-framework-core sql-server

質問

私はSaveChangesAsyncを呼び出すときに例外があります。私のアーキテクチャはとてもシンプルですが、私はCategoryクラスを持っています

public class Category {
  public Guid ID {get; set;}
  public Guid? ParentId {get; set;}
  public Category Parent {get; set;}
 [...]
}

データベースに新しいカテゴリ(ASP MVCアプリケーションに接続されている)を挿入する場合は、挿入する前にGUIDを設定します。私のデータベースが空で、親カテゴリを挿入したいときにエラーが発生しました(null Guid IdParentとnull Parentを持つため)。親の値を設定すると、これは起こりません。私はVisual StudioによってNullに親を設定することによって手動でレコードを追加することができます。

私は次のエラーがあります:

INSERTステートメントがFOREIGN KEY SAME TABLE制約 "FK_Category_Category_ParentId"と競合しました。競合はデータベース "HT_Root"、テーブル "dbo.Category"、列 "ID"で発生しました。ステートメントは終了されました。

私は単純な答えのためにスタックのオーバーフローで検索し、それを見つけませんでした。私はFluent APIで試してみる:

modelBuilder.Entity<Category>().HasOne(s => s.Parent).WithMany().HasForeignKey(s => s.ParentId);

しかし何も変わっていない。私は間違って何をしていますか?

受け入れられた回答

7 EFで変更されているように見えるこのgithubの問題を参照してください。

試す

public class Category 
{
    public Guid ID {get; set;}
    public Guid? ParentId {get; set;}
    public Category Parent {get; set;}
    public ICollection<Categories> Children {get; set;}
}

そして

modelBuilder.Entity<Category>()
    .HasOne(x => x.Parent)
    .WithMany(x => x.Children)
    .HasForeignKey(x => x.ParentId)
    .Required(false);

また、(指定されていれば)ParentIdがデータベースに存在することを常にチェックする必要があります。この問題が発生する可能性があるため、 null代わりにGuid.Empty (00000000-0000-0000-0000-000000000000)を追加してGuid.Empty



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ