Что я упускаю из виду?(Объект с таким же идентификатором уже существует в этом наборе объектов.)

StackOverflow https://stackoverflow.com/questions/3845174

Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top