Entity Framework 4: проблема сохранения клона объекта с помощью справки поиска - PullRequest
3 голосов
/ 01 апреля 2011

У меня есть метод, в котором я пытаюсь создать дубликат объекта Address. Адрес имеет ссылку на внешний ключ для StateProvince.

// ... get address from context
var newAddress = Util.DataContractSerialization<Address>(sourceAddress); // serializes and deserializes into/from memory
newAddress.AddressId = Guid.Empty;
ctx.Attach(newAddress); // error!

Как я должен это делать? Причина этой ошибки в том, что свойство StateProvince уже находится в контексте, когда я вызываю Attach, который пытается присоединить весь граф объекта. Мой текущий обходной путь - это вспомогательный метод, который явно копирует StateProvinceId, но не объект StateProvince.

Я бы предположил, что эта ошибка может возникнуть в других ситуациях, поэтому я хочу найти правильный способ решения этой проблемы.

1 Ответ

2 голосов
/ 01 апреля 2011

Да, потому что сериализация делает глубокое клонирование всего графа объекта. Вы не хотите глубокого клонирования, когда вам нужно клонировать только объект верхнего уровня. Обычно я делаю это путем реализации ICloneable для сущностей и клонирования вручную только сущностей без их связей. Нет лучшего способа, кроме рукописного ввода, помечающего все свойства навигации как не сериализуемые (IgnoreDataMemberAttribute или не помеченные как DataMember в случае сериализации контракта данных).

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