我正在从 Entity Framework 4 (Visual Studio 2010) 迁移到 Entity Framework 6 (Visual Studio 2013) 并且在关系行为方面存在一些问题。
我目前正在使用 Visual Studio 中的默认模型设计器工具,它为我生成所有实体类。
假设我有两个实体,EntityA 和 EntityB。我在 EntityA 和 EntityB 之间有关系,因此 EntityA 有许多 EntityB(而 EntityB 有一个 EntityA)。
在 EF4 中,我可以编写如下代码:
var entityA = new EntityA();
var entityB = new EntityB();
entityB.EntityA = entityA;
Console.Out.WriteLine(entityA.EntityBs.Count);
这将打印 1。但在 EF6 中,打印 0。
这也会在 EF4 中打印 True,但在 EF6 中打印 False:
var entityA = new EntityA();
var entityB = new EntityB();
entityA.EntityBs.Add(entityB);
Console.Out.WriteLine(entityB.EntityA != null);
我不太喜欢这种行为,那么有没有办法让它自动同步关系更改,而不必像在 EF4 中那样手动添加两端的关系?即使我将对象添加到数据库上下文中,关系更新似乎也不会同步。
为 EF4 生成的类看起来比为 EF6 生成的类复杂得多,所以我可以理解这样的东西不起作用......
编辑:
经过一番调查,这似乎是 EF4.1 中引入的新 DbContext 的问题,与 EF6 无关。我在 EF4 中使用的旧 ObjectContext 没有这个问题。即使不推荐,仍然可以通过选择“EF 6.x EntityObject Generator”而不是“EF 6.x DbContext Generator”作为代码生成模板来使用较旧的 ObjectContext 模板。要显示此内容,必须首先将其作为在线模板下载。
我仍然在寻找比使用旧的 ObjectContext 模板更好的方法,这样我就可以使用更新的 DbContext。