Что я упускаю из виду?(Объект с таким же идентификатором уже существует в этом наборе объектов.)
-
27-09-2019 - |
Вопрос
Я использую DTO и конвертеры в сценарии создания структуры объекта.Я хочу обновить объект.Итак, я изложил это утверждение:databasecontext.Tablename(s).Attach(entityobj);
Всякий раз, когда он попадает сюда, программа завершается с этой ошибкой:An entity with the same identity already exists in this EntitySet
.
Я чувствовал, что смогу обойти это, сказав databasecontext.Tablename(s).Detach(entityobj);
прежде чем я снова позвонил в Attach.Но программа по-прежнему завершается сбоем при выполнении инструкции Attach.
Что я упускаю из виду?Какой метод в контексте БД вызывает Обновление в Доменной службе?
Решение
Похоже, вы держите контекст Open, пока вы вносите изменения.
В этом случае вам не нужно прикреплять объект к контексту.
Если вы открываете контекст, получите объект из контекста, затем закройте контекст, внесите некоторые изменения в объект, затем откройте новый контекст. В этом случае вам нужно прикрепить объект к контексту.
Другие советы
Вопрос не совсем ясен.Вы не упомянули, как долго живет контекст вашей базы данных и когда вы загрузили объект в context.
Но, основываясь на вашем вопросе, я предполагаю, что вы загрузили объект, передали его куда-то как DTO, и когда DTO возвращается, вы используете все тот же контекст.Вы преобразуете DTO в entity и пытаетесь его снова присоединить => Исключение BANG.Один и тот же объект не может быть дважды помещен в контекст.Попробуйте использовать ObjectContext .Вместо этого ApplyCurrentValues (EF 4.0) или ApplyPropertyChanges (EF 1.0).