Entity Framework создает новую запись вместо изменения существующей - PullRequest
2 голосов
/ 02 февраля 2010

Я использую Entity Framework с приложением AS.NET MVC. Мне нужно разрешить пользователю создавать новые записи и изменять существующие. Я не могу извлечь существующие записи без проблем, но когда я возвращаюсь в отредактированную сущность и пытаюсь сохранить ее, она создает новую, сохраняет ее и оставляет исходную неизмененной.

Я получаю объект из EF, используя первичный ключ (например, идентификационный номер для записи сотрудника). Я успешно извлекаю его и устанавливаю MergeOption следующим образом:

Context.Sector.MergeOption = MergeOption.NoTracking;

Я могу проследить, что объект имеет правильные данные (используя ключ исходной записи) вплоть до точки, где я вызываю:

Context.SaveChanges();

Однако после этого создается новая запись вместо изменения существующей.

Есть ли что-то очевидное, чего мне здесь не хватает? Я бы подумал, что получение объекта и изменение некоторых его значений (не идентификатора) и сохранение его будет работать, но, очевидно, нет.

Спасибо

Chris

Ответы [ 2 ]

3 голосов
/ 02 февраля 2010

"NoTracking означает, что ObjectStateManager обойден, и поэтому каждый доступ к объектам сущности приводит к выборке из базы данных и созданию новых объектов."

- http://blog.dynatrace.com/2009/03/11/adonet-entity-framework-unexpected-behaviour-with-mergeoptions/

Я не думаю, что NoTracking - это то, что вы хотите.

0 голосов
/ 02 февраля 2010

Из вашего комментария: «распределены по различным уровням и некоторым проприетарным библиотекам»

Вы новый () запускаете ObjectContext, закрываете его или теряете ссылку на него, а затем пытаетесь сохранить ваш объект в новом () или другом ObjectContext?

Если это так, вы теряете всю информацию об отслеживании изменений. Если это так, то вы хотите вызвать метод Attach () для повторного присоединения объекта к контексту, ApplyPropertyChanges () и, наконец, SaveChanges ().

Джули Лерман имеет довольно хороший пост в блоге, в котором описываются все возможные варианты и методы отслеживания изменений. Вы также должны проверить эту статью MSDN на ту же тему.

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