Невозможно присоединить несколько объектов для вставки (объект с таким же ключом уже существует в ObjectStateManager) - PullRequest
1 голос
/ 20 марта 2012

У меня есть объект, который содержит список других объектов.Список объектов содержит первичный ключ (идентификатор), внешний ключ и строку.Когда я пытаюсь присоединить родительский объект, я получаю исключение An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.

. По какой-то причине Entity Framework (EF) считает, что это дублирующая запись.Записи имеют тот же внешний ключ , но свойство, являющееся первичным ключом (Id типа int), установлено в 0, что, на мой взгляд, является приемлемым, поскольку столбец является столбцом идентификаторов.

Кто-нибудь знает, что я здесь не так делаю?

1 Ответ

4 голосов
/ 20 марта 2012

Те же значения первичного ключа не допускаются, если вы прикрепляете объекты к контексту.Это возможно только в том случае, если вы добавляете их в контекст.

Если вы хотите вставить дочерние элементы для уже существующего родителя, вы можете попробовать следующее (пример для EF> = 4.1):

// put parent and all children into Added state
context.Parents.Add(parent);

// reset state for parent to Unchanged, but not for the children
context.Entry(parent).State = EntityState.Unchanged;

context.SaveChanges();

Я предполагаю, что родительский элемент и все дочерние элементы были отсоединены от контекста перед этим фрагментом кода.

Редактировать

С ObjectContext:

// put parent and all children into Added state
objectContext.Parents.AddObject(parent);

// reset state for parent to Unchanged, but not for the children
objectContext.ObjectStateManager.ChangeObjectState(parent,EntityState.Unchanged);

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