实体框架:由于外键约束导致的依赖性

时间:2011-07-05 20:46:47

标签: c# entity-framework code-first

我一直在寻找解决方案,但无法找到好的信息。很多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);
}

2 个答案:

答案 0 :(得分:0)

你有没有尝试过制作你的儿童财产

public virtual ICollection<Node>而不是List<Node>

答案 1 :(得分:0)

我有同样的问题,不知道什么是最好的解决方案,但我试着调用SaveChanges。 context.SaveChanges()然后将Child添加到Newly Created Entity并且它工作正常。