Нужна помощь в обработке объекта с тем же ключом - PullRequest
0 голосов
/ 02 марта 2011

Я получаю исключение

An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.

У меня есть объект, который отсоединен, а также имеет ключ в ObjectStateManager, это то, что я не понимаю. Как это возможно?

То, что я пытаюсь сделать, это прикрепить объект обратно к контексту, когда он возвращается от клиента (контроллер Asp MVC).

Если я сделаю это

db.MyEntity.Attach(myEntity);

Я получаю первое исключение.

Я знаю, что он отключен, потому что, когда я пытаюсь позвонить

db.MyEntity.Context.LoadProperty(myEntity, e => e.myProperty);

Я получаю исключение, что моя сущность отсоединена (что и должно быть, почему ключ в ObjectStateManager?).

Итак, чтобы подвести итог, я думаю, что у меня есть сущность, которая имеет ключ в ObjectStateManager и отсоединена. Как мне его прикрепить? Эм, я что-то упустил? Или я что-то недопонимаю?

Спасибо за любые предложения.

Edit: Как сказал @Ladislav Mrnka, моя проблема в том, что я загружаю объект с одинаковым идентификатором в одной обработке запроса. Я делаю это, потому что я хочу, чтобы исходные значения объекта для сравнения, и если есть проблемы, я хочу отобразить его обратно пользователю, но мне нужно присоединить его, что является проблемой, потому что есть объект со старыми значениями, все еще присутствующими в ObjectStateManager. Я присоединяю эту сущность, потому что мне также нужно отображать ленивые свойства Loaded. Каков правильный подход, чтобы сделать это? Просто сделать новый запрос для сущности?

1 Ответ

2 голосов
/ 02 марта 2011

Вы не можете загрузить сущность и прикрепить сущность с одинаковым идентификатором. Вы должны либо отсоединить загруженный, либо объединить изменения с загруженным (также проверьте метод ApplyCurrentValues).

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