实体框架5.0先使用现有数据库编码。使用电动工具对课程进行逆向设计。一切都很好。数据库有两个表。一个父母和一个带外键的孩子回到父母身份。 ID都是自动增量的int。我添加了一些父记录,现在想要将子记录添加到特定的父母。我能看到的唯一方法是通过在Parents表中搜索名称或其他属性并返回ID来找到适当的父ID。然后在添加子项时在外键属性中使用该ID。我不想创造一个新的父母,所以这是将孩子添加到现有父母的唯一方法吗?所有的互联网示例似乎添加一个孩子,并添加一个新的父母,而不是添加一个孩子到现有的父母。任何帮助将不胜感激实体框架 - 添加子实体
8
A
回答
22
“朱莉”(莱曼)恰巧是我们的老师之一,当谈到英孚。正如她在她的书DbContext中解释的那样,在父 - 子关联,两个导航属性(parent.Children,child.Parent)和一个外键属性(child.ParentId)中可以涉及三个属性。您可以在代码中设置其中的一个或它们的任意组合。
当EF被触发以检测更改(例如,当被调用SaveChanges
)它启动一个称为关系修正,其确保三个属性将在同步过程。
所以,你有三种选择,以子实体添加到父:
child.Parent = parentObject
。父对象应该首先从数据库中获取。parentObject.Children.Add(child)
。还需要来自数据库的预先存在的父对象。child.ParentId = parentId
,对此您只需要知道id。您可以按照您的建议获取Id,但同样如此,对于您知道的对象不会被删除,您可以将其保存在某个变量中以在事务中重复使用它。
使用前两个选项,子对象不需要手动添加到上下文中。 EF足够了解这是新的。有了第三个选项,它必须在SaveChanges
之前添加到context.Children
。
+0
我已经将此标记为答案,并且还指出了Pawel的评论,两者都证实了我的假设,即我需要父实体或至少是父代ID,然后才能添加子代。附:我拥有Julie的所有书籍和例子,它们在学习Entity Framework的过程中提供了巨大的帮助。 – user1626137
相关问题
- 1. 实体框架添加实体也添加子实体
- 2. 实体框架:ObjectSet.AddObject不添加实体?
- 3. 实体框架 - 当添加DbUpdateException实体
- 4. 实体框架添加新的实体
- 5. 实体框架 - 更新实体添加/修改的孩子和孙子实体
- 6. 实体框架在添加
- 7. 实体框架添加所有子实体
- 8. 实体框架6 - 如何添加子实体?
- 9. 实体框架5加实体和子实体与
- 10. 实体框架 - 使用子实体加载实体
- 11. 实体框架插入子实体
- 12. 实体框架:删除子实体
- 13. 实体框架 - 保存子实体
- 14. 实体框架 - 筛选子实体
- 15. 更新子实体实体框架
- 16. 实体框架计数子实体
- 17. c#实体框架加载实体
- 18. 实体框架加载相关实体
- 19. 实体框架 - 加载嵌套实体
- 20. 实体框架:实体
- 21. 实体框架实体
- 22. 实体框架实体json
- 23. 实体框架 - 延迟加载,加载子实体问题
- 24. 从实体框架中的父实体获取子实体c#
- 25. 实体框架查询包含实体集合的子实体
- 26. 实体框架获取具有子实体的实体
- 27. 实体框架:较大实体的子集实体
- 28. 实体框架DeleteObject子
- 29. 实体框架 - Where子句
- 30. 休眠添加实体子实体ID
要设置相关实体,您可以将导航属性设置为父实体或设置外键。如果你知道这个ID,并且你没有父节点就是外键。如果您有父对象只需设置导航属性。如果你不知道该ID,也没有父对象,你怎么知道该子实体与哪个父母相关? – Pawel
让我试一试。假设父实体是老师,我在db中有Bob,Julie和Dave。儿童实体是一个教师与多个班级关系的班级。我想向朱莉添加一个班级,但我没有她的主要ID,因为它是几天前我进入她时自动创建的。那么,我是否必须搜索教师姓名属性中的“Julie”并返回她的主ID,然后将其用作新类别外键? – user1626137
识别Julie的唯一方法是使用ID。原因是ID始终是唯一的,为什么名称不是。您可以使用像context.Teachers.First(t => t.Name ==“Julie”)这样的代码从数据库中引入实体并使用该ID或引用。没有其他的方式来建立关系,因为你不知道如何设置关系。另外请注意,Julie可能在此期间被删除。 – Pawel