Entity Framework 4.0 Прикрепить граф объектов - PullRequest
2 голосов
/ 21 февраля 2012

Я пытаюсь присоединить и добавить отключенные объекты в контекст Entity Framework. Например:

У меня есть объект Клиент и свойство навигации для детализации Заказ объект. Идея состоит в том, чтобы получить сущность Customer и внести изменения в сущность, а затем добавить новые сущности Order в сущность Customer .

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

"Объект с временным значением EntityKey не может быть присоединен к контексту объекта."

Я понимаю, что ошибка связана с добавлением Порядка сущностей, которые должны быть Добавлены , а не Присоединены .

Есть ли способ присоединить или добавить существующую сущность с новыми дочерними сущностями в контекст?

Ответы [ 3 ]

2 голосов
/ 21 февраля 2012

Если вы хотите использовать Attach таким образом, вы не должны использовать EntityObject сущности на основе - используйте вместо этого POCO. В любом случае вам все равно придется пройти весь граф объектов и установить правильное состояние (измененное, добавленное, удаленное) для каждой сущности и независимой ассоциации. В конце дня присоединение графа обособленных объектов очень сложно даже с POCO - лучший способ - не прикреплять граф, а вместо этого загружать те же данные из базы данных и синхронизировать автономный граф с загруженным графом (необходимо кодировать это сами).

0 голосов
/ 26 сентября 2012

Проблема, которую вы описываете, была также предметом моей статьи о CodeProject: Повторное присоединение графов объектов с помощью Entity Framework .

Обратите внимание, что последний код доступен на ef4tiers.codeplex.com .

0 голосов
/ 23 февраля 2012

После некоторых исследований я нашел способ обойти эту проблему:

Вместо того, чтобы возвращать объект Customer обратно в контекст, я теперь добавляю объект Customer кконтекст и затем изменить состояние объекта на Изменено .

Мне нужно скопировать объект Customer в новый объект Customer избавиться от EntityKey (вы не можете добавить объект с EntityKey, вам нужно Присоединить его), а затем добавить новый Customer объект в контекст, используя AddObject метод.

Это немного некрасиво, но работает.Я открыт для любых других предложений?

...