实体框架5不更新两个实体中的导航属性

时间:2012-09-19 03:29:34

标签: c# .net entity-framework

我更新了一个项目,以使用Entity Framework附带的新VS2012。但是,我遇到了一些问题导致我的代码抛出异常的原因。

VS2010 Entity Framework版本中,我能够创建或修改Entity并在调用SaveChanges()之前使用其导航属性

例如: 具有发票集合的客户的导航属性。

Client c = new Client();
Invoice I = new Invoice();
c.Invoices.Add(I);

然后我可以在我的代码中的某处使用Invoice.Client,然后实际保存它而不会出现问题。现在Invoice.Client == null

同样在设置I.Client = C时,I未显示在C.Invoices

我在这里缺少什么,或者只是Entity Framework 5是怎样的?

修改

VS2010中,我创建了一个新项目,添加了相同的DataSource,并且以下代码按预期工作:

Client C = new Client();
C.Name = "Test";
Invoice I = new Invoice();
C.Invoices.Add(I);
MessageBox.Show(I.Client.Name);

VS2012和骰子中完全相同。

1 个答案:

答案 0 :(得分:0)

在上面的示例中,您实际上并未附加到上下文中。

EF的反向引用仅通过名为fixups的进程填充,该进程由于DetectChanges而运行,而DetectChanges又由(在您的情况下)IDbSet<> .Add()

触发

如果在向其添加发票之前修改代码以将客户端附加到上下文,则应该看到预期的行为

修改

我还没有真正使用此功能与DB First(.edmx),但您可以在2010年使用以下模型类型启用它。

此模型类型已于2012年作为STEs have been deprecated删除。 (虽然我的理解是他们仍然可以向后兼容,所以如果你从2010年到2012年升级项目,你仍然可以使用该模型)

Self Tracking Entities