10

Entity Framework 5.0 代码优先与现有数据库。使用电动工具对课程进行逆向工程。一切都很好。数据库有两个表。一个父母和一个孩子,外键回到父母ID。ID 都是具有自动增量的 int。我添加了许多父记录,现在想将子记录添加到特定的父记录。我能看到的唯一方法是通过在 Parent 表中搜索名称或其他属性并返回 ID 来找到适当的父 ID。然后在添加子项时在外键属性中使用该 ID。我不想创建新的父母,这是将孩子添加到现有父母的唯一方法吗?所有互联网示例似乎都在添加新父级的同时添加了一个子级,而不是向现有父级添加了一个子级。任何帮助将不胜感激

4

1 回答 1

26

谈到英孚,“朱莉”(勒曼)恰好是我们的一位老师。正如她在DbContext一书中解释的那样,父子关联中可能涉及三个属性,两个导航属性(parent.Children、child.Parent)和一个外键属性(child.ParentId)。您可以在代码中设置其中之一或它们的任意组合。

当 EF 被触发以检测更改时(例如,何时SaveChanges被调用),它会启动一个称为关系修复的过程,以确保三个属性将同步。

因此,您可以通过三个选项将子实体添加到父实体:

  1. child.Parent = parentObject. 应首先从数据库中获取父对象。
  2. parentObject.Children.Add(child). 还需要数据库中预先存在的父对象。
  3. child.ParentId = parentId, 你只需要知道 id。您可以按照建议的方式获取 Id,但同样,对于您知道不会被删除的对象,您可以将其保存在某个变量中,以便在事务中重用它。

使用前两个选项,子对象不需要手动添加到上下文中。EF 足够了解它是新的。对于第三个选项,它确实必须添加到context.Childrenbefore SaveChanges

于 2012-10-31T08:40:25.687 回答