EF 7:INSERT語句與FOREIGN KEY SAME TABLE衝突

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

當我調用SaveChangesAsync時,我有一個例外。我的架構非常簡單,我有一個類別,包含

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);

但沒有改變。我究竟做錯了什麼 ?

一般承認的答案

它似乎在EF 7中發生了變化。 請參閱此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(如果已指定)。注意添加Guid.Empty (00000000-0000-0000-0000-000000000000)而不是null因為這可能會導致問題。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow