2011-07-05 85 views
3

我一直在尋找解決方案,無法找到好的信息。許多EF文件已經過時了。這是我的問題。實體框架:由於外鍵約束導致的依賴

如果我通過ParentID導航屬性向孩子添加孩子,一切正常。

如果我通過孩子列表中添加一個孩子的父母和孩子是預先存在的,我得到這個異常:

DbUpdateException:無法確定 的依賴 操作的有效排序。 到外鍵約束, 需求或商店生成的 值可能存在依存關係。

如果我通過孩子列表中添加一個孩子的家長和孩子是新的(也需要保留),我得到這個異常:

DbUpdateConcurrencyException:商店 更新,插入,或刪除語句 影響了意外的行數 (0)。實體可能已被修改 或自實體加載後刪除。 刷新ObjectStateManager條目。

Node.cs

public class Node 
{ 
    public long ID { get; private set; } 
    public long? ParentID { get; set; } 
    public List<Node> Children { get; set; } 
} 

相關DbContext.cs

protected override void OnModelCreating(DbModelBuilder mb) 
{ 
    mb.Entity<Node>() 
    .HasMany(c => c.Children) 
    .WithOptional() 
    .HasForeignKey(c => c.ParentID); 
} 

回答

0

你有沒有嘗試過的List<Node>

+0

我不想動態代理。我會嘗試使用虛擬標記來關閉代理,但我認爲這不會有幫助。這不是一個懶惰加載問題或任何東西(據我所知,我想)。我將不得不在明天更新。 – OpticalDelusion

0

我必須讓你的孩子財產

public virtual ICollection<Node>代替同樣的問題,不知道什麼是最好的解決方案,但我試圖調用SaveChanges。 context.SaveChanges(),然後添加孩子到新創建的實體,它的工作。