0

我已经更新了一个项目以使用新Entity FrameworkVS2012. 但是,我遇到了一些问题,因为我的代码引发了异常。

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

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

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

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

同样在设置中I.Client = CI不显示在下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,没有骰子。

4

1 回答 1

0

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

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

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

编辑:

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

由于STE 已被弃用,此模型类型已于 2012 年删除。(虽然我的理解是它们仍然适用于向后兼容,所以如果您要从 2010-2012 升级项目,您仍然可以使用该模型)

自我追踪实体

于 2012-09-19T03:58:38.203 回答