Entity framework 4 实体框架-添加带有代理对象的POCO,然后更新同一对象会在数据库中创建重复项

Entity framework 4 实体框架-添加带有代理对象的POCO,然后更新同一对象会在数据库中创建重复项,entity-framework-4,Entity Framework 4,我使用实体框架4.0,POCO实体使用动态代理进行更改跟踪。我正在尝试添加一个实体,调用SaveChanges,然后更新一些需要从添加的对象返回的标识值的其他实体。由于对象在edmx文件中不相关,因此我无法立即调用SaveChanges并让EF管理所有对象。最后,我想编辑原始对象中的几个字段,然后让SaveChanges更新它。发生的情况是数据库正在为此原始项创建重复记录。它添加了第一个对象,返回了一个新的ID,但是当我稍后在编辑了两个字段后调用SaveChanges时,它再次将该项添加到表中。

我使用实体框架4.0,POCO实体使用动态代理进行更改跟踪。我正在尝试添加一个实体,调用SaveChanges,然后更新一些需要从添加的对象返回的标识值的其他实体。由于对象在edmx文件中不相关,因此我无法立即调用SaveChanges并让EF管理所有对象。最后,我想编辑原始对象中的几个字段,然后让SaveChanges更新它。发生的情况是数据库正在为此原始项创建重复记录。它添加了第一个对象,返回了一个新的ID,但是当我稍后在编辑了两个字段后调用SaveChanges时,它再次将该项添加到表中。有什么想法吗

MyClass newItem = new MyClass();
newItem.field1 = 2;
newItem.field2 = false;
newItem.field3 = 44;

context.AddObject(newItem);
//force a save to get the identity of the added item so I can use it with another entity
context.SaveChanges();

//Setting the object state to unchanged (or not doing anything) will add a duplicate object
//If I set the object state to modified, it does not add a duplicate record, but it also does not save the updates
context.SetObjectState(newItem, ObjectStateEntry.Unchanged);

//do something else unrelated using the new ID returned from the IDENTITY field in the database

//update a couple of fields on the newly added item
newItem.field1 = 3;
newItem.field2 = true;
//save again
context.SaveChanges();

我也经历过类似的事情。EF4似乎有问题:


调用SetObjectState时,我犯了一个错误。我有一个调用此方法的包装器,该包装器传入了错误的枚举值。现在一切正常。

显示完整的编辑代码。这不应该发生。另外,
newItem
\u newItem
之间有什么区别?