我一直在寻找解决方案,但无法找到好的信息。很多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 :(得分:0)
你有没有尝试过制作你的儿童财产
public virtual ICollection<Node>
而不是List<Node>
答案 1 :(得分:0)
我有同样的问题,不知道什么是最好的解决方案,但我试着调用SaveChanges。 context.SaveChanges()然后将Child添加到Newly Created Entity并且它工作正常。