2011-07-05 55 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(),然后添加孩子到新创建的实体,它的工作。