Что я упускаю?(Сущность с такой же идентичностью уже существует в этом EntitySet.) - PullRequest
0 голосов
/ 02 октября 2010

Я использую DTO и конвертеры в сценарии создания объектов. Я хочу обновить сущность. Поэтому я положил это утверждение: databasecontext.Tablename(s).Attach(entityobj); Всякий раз, когда он попадает сюда, программа заканчивается этой ошибкой: An entity with the same identity already exists in this EntitySet.

Я чувствовал, что могу обойти это, сказав databasecontext.Tablename(s).Detach(entityobj); прежде чем я снова позвонил Attach. Но программа по-прежнему не работает в операторе Attach.

Чего мне не хватает? Какой метод в контексте БД вызывает Update в доменной службе?

Ответы [ 2 ]

1 голос
/ 02 октября 2010

Вопрос не понятен.Вы не упомянули, как долго живет ваш контекст базы данных и когда вы загружали сущность в контекст.

Но, основываясь на вашем вопросе, я предполагаю, что вы загрузили сущность, передавшую ее где-то как DTO, и когда возвращается DTOвы используете все тот же контекст.Вы конвертируете DTO в сущность и пытаетесь снова присоединить исключение => BANG.Одна и та же сущность не может быть помещена дважды в контекст.Попробуйте вместо этого использовать ObjectContext.ApplyCurrentValues ​​(EF 4.0) или ApplyPropertyChanges (EF 1.0).

0 голосов
/ 02 октября 2010

Похоже, что вы сохраняете контекст открытым, пока вносите изменения.

В этом случае вам не нужно повторно присоединять объект к контексту.

Если вы открываете контекстполучить объект из контекста, затем закрыть контекст, внести некоторые изменения в объект, а затем открыть новый контекст.В этом случае вам необходимо прикрепить объект к контексту.

...