自动更新关系另一侧的导航属性

时间:2019-05-14 10:17:31

标签: c# entity-framework-6 dbcontext

我使用Entity Framework 6.0拥有以下数据模型:

Data Model

要创建实体类,我使用EF6.x DbContext Generator。它将为MyTable1MyTable2创建一个文件,并将其Navigation属性声明为HashSet。

我在创建EntityCollection而不是HashSet之前创建的ObjectContext Generator及其创建的类都是从EntityObject继承的。

现在,我有以下代码:

var myTable2 = new MyTable2();
var myTable1 = new MyTable1();
myTable1.MyTable2.Add(myTable2);

myTable2现在已添加到MyTable2的{​​{1}}导航属性中。 myTable1未添加到myTable1的导航属性中。

当我使用ObjectContext Generator时,EF将myTable2的{​​{1}}导航属性自动设置为MyTable1。 自从我切换到DbContext Generator以来,这种情况不再发生。

当我在DbContext中添加了这些对象时,可以调用DetectChanges()。但是:

  • 我有时在不创建DbContext的情况下使用这些类(例如在单元测试中)。
  • 我正在更新许多旧代码,要检查所有代码并找出在何处添加DetectChanges()调用,将花费一些时间。

有没有一种方法可以使EF在关系的另一侧更改后立即自动更新其另一侧的Navigation属性?

编辑:

根据评论,我了解到没有myTable2的情况下,我必须手动更新另一侧的导航属性。

如果使用myTable1,我尝试使用代理,因此可以省略DbContext调用。我将所有属性(不仅是导航属性)虚拟化,并从构造函数中删除了导航属性(HashSet)初始化。

该代码段现在使用DbContext方法实例化对象:

DetectChanges()

Create()现在将导航属性链接添加到using (var context = new EFTestEntities()) { context.Configuration.AutoDetectChangesEnabled = true; context.Configuration.ProxyCreationEnabled = true; var myTable2 = context.MyTable2.Create(); var myTable1 = context.MyTable1.Create(); myTable1.MyTable2.Add(myTable2); } 。但是myTable2的外键不会更新-即使我调用myTable1。这里还缺少什么?

0 个答案:

没有答案