实体框架5.0代码首先使用现有数据库。使用电动工具反向设计类。一切都很好。数据库有两个表。一个父项和一个子项,外键返回父ID。 ID都是自动增量的int。我已添加了许多父记录,现在想要将子记录添加到特定父级。我可以看到这样做的唯一方法是通过在Parents表中搜索名称或其他属性来查找相应的父ID,并返回ID。然后在添加子项时在外键属性中使用该ID。我不想创建一个新的父母,所以这是将孩子添加到现有父母的唯一方法吗?所有的互联网示例似乎都添加了一个孩子,同时添加了一个新的父级,而不是将子级添加到现有的父级。任何帮助将不胜感激
答案 0 :(得分:23)
当触发EF以检测更改时(例如,在调用SaveChanges
时),它会启动一个名为 relationship fixup 的过程,以确保这三个属性保持同步。
因此,您有三个选项可以将子实体添加到父级:
child.Parent = parentObject
。应首先从数据库中提取父对象。parentObject.Children.Add(child)
。还需要数据库中预先存在的父对象。child.ParentId = parentId
,您只需要知道ID。您可以按照建议的方式获取Id,但同样,对于您知道不会被删除的对象,您可以将其保存在某个变量中,以便在事务中重复使用。使用前两个选项,不需要手动将子对象添加到上下文中。 EF足够了解它是新的。使用第三个选项时,必须在context.Children
之前将其添加到SaveChanges
。