我发送父母及其子女都要更新到我的服务层。
模型设置如下:
public class Parent
{
public int ParentId { get; set; }
public ICollection<Child> Children;
}
public class Child
{
public int ChildID {get; set;}
public virtual Parent Parent{get;set}
public virtual int ParentId{get; set;}
public string FirstName { get; set; }
}
我喜欢的行为是,子节点始终附加到父节点,因此如果子节点在未找到附加的数据库中,我们应该删除它。如果它不存在,请创建它。如果存在,请更新它。
如何在不编写代码的情况下手动完成所有这些调用?就像删除所有,然后重新添加所有。
答案 0 :(得分:2)
您不需要删除所有子项并重新添加它们(如果您在数据库中有其他实体引用您只想更新的子项,则无论如何都可能是一个问题。删除并重新添加 - 添加它会导致外键约束违规)。
你实际需要做的事情更复杂:(
您必须在数据库中加载原始对象图,然后逐个检查子项是否已删除,如果是新的或已存在。
完全适合您的模型的示例如下:
实体框架不支持您使用分离的对象图更新数据库中的对象图。它提供的唯一支持是更新标量和复杂属性。对于那些,您可以使用ApplyCurrentChanges
(适用于ObjectContext
)或Entry(entity).CurrentValues.SetValues
(适用于DbContext
)。后者在链接示例中用于更新父级和每个子级的标量属性。但更新实体之间的关系是一项手动任务。