Свойства навигации моего объекта приводят к сбою моего глубокого клона с ошибкой:
"Объект с таким же ключом уже существует в ObjectStateManager"
Справочная информация:
Пользователи хотят иметь возможность клонировать родительскую запись и все связанные с ней дочерние записи.Я могу клонировать родительскую сущность в одиночку (без ошибок), используя эту простую технику:
_context.Detach(currentParentEntity);
_context.AddToParentEntities(currentParentEntity);
_context.SaveChanges();
Я нашел это решение и другую рабочую технику поверхностного клонирования (от diamandiev) здесь .
Так как мне действительно нужна глубокая копия, я попытался реализовать метод клонирования сериализации, показанный здесь , здесь и здесь .Мой код вызова выглядит следующим образом:
ParentEntity clonedParentEntity = (ParentEntity)DeepClone(currentParentEntity);
_context.Detach(currentParentEntity);
clonedParentEntity.EntityKey = null;
_context.AddToParentEntities(clonedParentEntity);
_context.SaveChanges();
Этот код работает только при клонировании currentParentEntity без дочерних объектов (на которые есть ссылки в свойствах навигации).Если дочерние объекты существуют, я получаю ошибку «объект с тем же ключом уже существует».Зачем? Как я могу глубоко клонировать как родительскую сущность, так и связанные с ней дочерние сущности, а затем сохранить клонированную запись без каких-либо ошибок?
Заранее спасибо.
РЕДАКТИРОВАТЬ: Для полнойпринятый ответ прочитайте ответ Ладислава Мрнки плюс комментарии .