23

我讀了很多程序員的帖子,這些帖子遇​​到了無法確定依賴操作的有效順序。由於外鍵約束,模型要求或商店生成的值,可能會存在依賴關係 - 在實體框架中使用自引用關係時出現異常。實體框架中的自引用/父子關係

我試圖讓親子關係的工作:

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

這是我的配置使用(流利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不插入帶有空parentId的類別。該數據庫允許ParentId外鍵爲空。

你能告訴我該怎麼做嗎?

回答

28

你必須定義在類類爲可爲空使用它作爲外鍵屬性的可選關係ParentId

public int? ParentId { get; set; } 

int財產不能取值null,因此不能代表NULL作爲數據庫列中的值。

+0

謝謝!這工作。 – Julius 2012-03-31 14:15:40

+0

+1給你們兩個,你讓我的一天。 Thax很多。 – 2013-11-10 15:49:46

+0

有沒有一種方法來實現這個父子關係的屬性(流利)? – Shimmy 2015-02-26 14:07:19