Я использую Entity Framework 4.0 с объектами POCO, использующими динамические прокси для отслеживания изменений. Я пытаюсь добавить объект, вызвать SaveChanges, а затем обновить некоторые другие объекты, которым необходимо значение IDENTITY, возвращаемое из добавленного объекта. Поскольку объекты не связаны в файле edmx, я не могу вызвать SaveChanges сразу и заставить EF управлять всем этим. И затем в конце я хочу отредактировать несколько полей в исходном объекте, а затем SaveChanges обновить его. Происходит то, что база данных создает дубликаты записей для этого исходного элемента. Это добавление первого объекта, возвращение нового идентификатора, но затем, когда я позже вызываю 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();