Я нашел этот фрагмент здесь :
public static T DeepClone<T>(this T obj)
{
using (var ms = new MemoryStream()) {
var bf = new BinaryFormatter();
bf.Serialize(ms, obj);
ms.Position = 0;
return (T)bf.Deserialize(ms);
}
}
В котором говорится, что мы можем сделать глубокое копирование всех связанных объектов с помощью этой вещи.
Я пытаюсьсделать копию следующим образом:
db.Detach(myEntity);
myEntity.EntityKEy = null;
Entity newEntity = new Entity();
newEntity = DeepClone<Entity>(Entity);
db.Entities.AddObject(newEntity);
db.SaveChanges();
ЭТО работает, но все равно не копирует вложенные \ связанные записи.что я делаю не так здесь?
У меня есть эта структура Entity-> ChildEntity -> ChildChildEntity
-> - один-ко-многим
, поэтому я предполагаю, что при копировании объекта он также будет копировать вседочерние записи.
ОБНОВЛЕНИЕ: После предложений я сделал следующее:
Entity newEntity = new Entity();
Eneity Entity = db.Include("ChildEntity").Where(p=>p.Id==Id).Single();
newEntity = DeepClone<Entity>(Entity);
db.Detach(myEntity);
myEntity.EntityKEy = null;
db.Entities.AddObject(newEntity);
db.SaveChanges();
Получение исключения для строки AddObject:
Объектс тем же ключом уже существует в ObjectStateManager.ObjectStateManager не может отслеживать несколько объектов с одним и тем же ключом.