将端点替换为1或0或1关系

时间:2016-11-02 00:53:58

标签: c# entity-framework entity-framework-6

我的模型类似于以下表示1到0或1的关系。

public class Parent
{
    public int ParentId { get; set; }
    public Child Child { get; set; }
}

public class Child
{
    [Key, ForeignKey("Parent")]
    public int ChildId { get; set; }

    public Parent Parent { get; set; }
}

我需要替换Parent的Child成员。正在从外部来源收到一个新实例。

但是,在替换Child并尝试保存到数据库之后:

parent.Child = <new instance>
context.Entry(parent).State = EntityState.Modified;

我收到错误

  

“发生了参照完整性约束违规:属性   关系一端的'Parent.ParentId'的值不会   匹配另一端'Child.ChildId'的属性值。“

如何更换端点?我该如何删除它?感谢

1 个答案:

答案 0 :(得分:1)

此外,我认为你有&#34;孩子冲突&#34; :因为你有一对一的关系,所以只有一个孩子可以和父母一起。当您分配newChild时,EF无法存储它,因为已存在相同PK (FK为父级)的另一个(旧)子项。相反,您应删除当前子项,然后分配新子项:

context.Children.Remove(parent.Child);
context.SaveChanges();
parent.Child = newChild;