我使用Entity Framework 6.0拥有以下数据模型:
要创建实体类,我使用EF6.x DbContext Generator。它将为MyTable1
和MyTable2
创建一个文件,并将其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()。但是:
有没有一种方法可以使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
。这里还缺少什么?