替换1到0或1关系的端点

本文关键字:端点 关系 替换 | 更新日期: 2023-09-27 18:16:04

我有如下的模型,表示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;

我收到错误

"发生了引用完整性约束违反:属性值(s)的"父"。关系的一端没有ParentId匹配'Child '的属性值。孩子在电话那头。"

如何替换端点?我怎样才能去掉它?由于

替换1到0或1关系的端点

此外,我认为你有"孩子冲突":因为你是一对一的关系,只有一个孩子可以陪伴父母。当你分配newChild时,EF不能存储它,因为另一个(旧的)具有相同PK的子节点已经存在。相反,您应该删除当前子节点,然后分配新的子节点:

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