Entity Framework - Добавление POCO с прокси-объектом и последующее обновление того же объекта создает дубликаты элементов в базе данных - PullRequest
0 голосов
/ 22 марта 2011

Я использую 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();

Ответы [ 2 ]

0 голосов
/ 12 апреля 2011

Это была ошибка с моей стороны при вызове SetObjectState.У меня была оболочка, которая вызывала этот метод, и оболочка передавала неверное значение Enum.Теперь все работает хорошо.

0 голосов
/ 24 марта 2011

У меня было что-то подобное случиться. EF4 кажется глючным:

Entity Framework Добавление существующего элемента вызывает клон

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...