通过我在这里和其他论坛提出的各种问题,我得出的结论是,当涉及到 Entity Framework 中生成的实体上下文对象时,我不知道自己在做什么。
作为背景,我有大量使用 LLBLGen Pro 的经验,而 Entity Framework 对我来说大约三周前。
假设我有一个名为“myContext”的上下文。在我的模型中有一个名为 Employee 的表/实体,所以我现在有一个 myContext.Employees。我假设这意味着该属性表示我上下文中的一组 Employee 实体。但是,我认为是错误的,因为我可以通过以下方式将新实体添加到上下文中:
myContext.Employees.AddObject(new Employee());
这个新的 Employee 实体在 myContext.Employees中没有出现。据我所知,找到这个新添加的实体的唯一方法是在 myContext.ObjectStateManager 中找到它。这听起来像是 myContext.Employees 集实际上不是上下文中的 Employee 实体集,而是存在于数据库中的 Employee 实体的某种表示。
为了进一步增加这种混乱,假设我正在查看单个 Employee 实体。有一个与 Employee 有 M:1 关系的 Project 实体(一个员工可以有多个项目)。如果我想为特定员工添加一个新项目,我只需:
myEmployee.Projects.Add(new Project());
太好了,这实际上将项目添加到集合中,正如我所期望的那样。但这与 ObjectSet 属性脱离上下文的工作方式背道而驰。如果我将一个新项目添加到上下文中:
myContext.Projects.AddObject(new Project());
这不会改变项目集。
如果有人向我解释这一点,我将不胜感激。另外,我真的想要一个上下文中所有员工(或项目)的集合,并且我希望它可以作为上下文的属性使用。EF可以做到这一点吗?