3

我調用SaveChangesAsync時出現異常。 我的架構是非常簡單的,我有一個範疇類,至極包含EF 7:INSERT語句與FOREIGN KEY SAME TABLE衝突

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

當我想插入數據庫中的新類別(連接到我的ASP MVC應用程序),我在做插入之前設置的GUID。 當我的數據庫爲空並且我想要插入父類別(因此使用空的Guid IdParent和空父母)時發生錯誤。如果我設置父值,這不會發生。我可以通過將Visual Studio設置爲Null來手動添加記錄。

我有以下錯誤:

INSERT語句衝突與外鍵相同的表 約束「FK_Category_Category_ParentId」。衝突發生在 數據庫「HT_Root」,表「dbo.Category」,列'ID'。陳述 已被終止。

我在棧溢出搜索一個簡單的答案,並沒有找到它。 我使用Fluent API來運行:

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

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

+1

你試過'HasOptional'而不是'HasOne'嗎? –

+0

@SergeyKolodiy我在EF 7流利API中沒有任何HasOptional ...? – cdie

+0

你可以在數據庫中手動插入行嗎,就像使用SSMS一樣?這聽起來像你的數據庫表沒有正確設置。 – CodingGorilla

回答

1

它似乎在EF 7 See this github issue

已經改變了嘗試

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,因爲這可能會導致問題。

+0

更改爲此模塊後出現同樣的錯誤 – cdie

+0

您是否插入帶或不帶父ID的記錄? –

+0

它初始化與父ID一起工作,但沒有,但仍然不工作,沒有父母身份證 – cdie

相關問題