【问题标题】:Entity Framework: Dependencies due to foreign key constraints实体框架:由于外键约束而产生的依赖关系
【发布时间】:2011-07-05 20:46:46
【问题描述】:

我一直在寻找解决方案,但找不到好的信息。很多 EF 文档都已经过时了。这是我的问题。

如果我通过 ParentID 导航属性将孩子添加到父母,一切正常。

如果我通过“子项”列表将子项添加到父项,并且该子项已存在,则会出现以下异常:

DbUpdateException:无法确定 受抚养人的有效订购 操作。由于存在依赖关系 外键约束,模型 需求,或商店生成 价值观。

如果我通过 Children 列表将孩子添加到父母并且孩子是新的(也需要持久化),我会收到以下异常:

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

【问题讨论】:

    标签: c# entity-framework code-first


    【解决方案1】:

    您是否尝试过让您的 Children 财产

    public virtual ICollection&lt;Node&gt; 而不是List&lt;Node&gt;

    【讨论】:

    • 我不想要动态代理。我会尝试使用虚拟标记并关闭代理,但我认为这不会有帮助。这不是延迟加载问题或任何问题(据我所知)。我明天必须更新。
    【解决方案2】:

    我遇到了同样的问题,不确定什么是最佳解决方案,但我尝试调用 SaveChanges。 context.SaveChanges() 然后将孩子添加到新创建的实体中,它就可以工作了。

    【讨论】:

      猜你喜欢
      • 2017-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-05
      • 1970-01-01
      • 1970-01-01
      • 2017-07-20
      相关资源
      最近更新 更多