Entity Framework 4 - Трудность понимания того, как работает клонирование объекта - PullRequest
2 голосов
/ 25 февраля 2011

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

Я пробовал два примера кода:

http://msmvps.com/blogs/matthieu/archive/2008/05/31/entity-cloner.aspx

http://social.msdn.microsoft.com/forums/en-US/adodotnetentityframework/thread/a967b44b-c85c-4afd-a499-f6ff604e2139

, который, похоже, работает. Я думаю, что проблема заключается в моем понимании того, что происходит. Насколько я понимаю, процесс клонирования создает отдельный клон целевого объекта, который я должен иметь возможность прикрепить или добавить объект обратно в контекст, и контекст сохранит его в БД, где ему будет автоматически назначен уникальный идентификатор PK .

Главное, что меня смущает, это то, что когда я клонирую свой объект-сущность, а затем смотрю на свойства клона в режиме отладки, кажется, что его навигационные коллекции все еще явно указывают на действительные сущности, на которые указывает скопированный объект. Однако EntityState отсоединен. Это нормально? Я предположил, что свойства навигации объекта клона указывают на те же объекты, что и на графике клонированного объекта. Но объекты-клоны «отделены», а объекты-клоны «неизменны».

Я ооочень запутался ... есть идеи?

1 Ответ

2 голосов
/ 25 февраля 2011

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

...