2015-06-17 3 views
0

Я работаю над приложением, которое использует Entity Framework 4.0 (и насколько я знаю, мы не можем его изменить).Как глубоко клон/копировать и сущность в сущности Framework 4.0?

Мне нужно сделать глубокие копии объекта, в случае, когда пользователи выбирают и объекты, он получит полную копию, назначенную ему, со всеми свойствами навигации и всеми созданными.

Я знаю, что в сущности framework 4.1 и более поздней версии я мог бы использовать de AsNoTracking, а затем просто добавить его, но я не знаю, как это сделать в инфраструктуре сущностей 4.0. Есть ли простой способ?

Редактировать: Благодаря тому, что @PanagiotisKanavos сказал, что я понял, что я действительно хотел отделить сущность. Это отчасти решить мою проблему, но не укомплектовать, делая:

ctx.Set.Detach(entity) 

Частный объект, но я потерял все ассоциации, так что любая идея, как Отделите остальную часть ассоциации графа?

Update: После долгих экспериментов я бежал из идей, я пытался глубокий клон, и detatch, но когда я добавляю я и даю мне исключение.

Если я только отсоединяю, я теряю все ассоциации, так что любая идея?

+0

Это может быть полезно http://stackoverflow.com/questions/5249633/deep-clone-using-entity -framework – dmigo

+0

Глубокое клонирование не имеет ничего общего с Entity Framework или базами данных, это касается только объектов. Он также не будет создавать никаких * новых * записей, поскольку идентификаторы объектов останутся неизменными. Это приведет только к обновлению существующих записей –

+0

Является ли актуальным вопрос, как отсоединить объекты в EF 4? Для этого вам не нужно 'AsNoTracking', вы можете использовать' ObjectContext.Detach' для всех связанных объектов –

ответ

0

Вы должны сделать свой класс [Serializable] и включают в себя

using System.Runtime.Serialization.Formatters.Binary; 
using System.IO; 

Тогда

public static T DeepCopy<T>(T objectToCopy) 
{ 
using (var memStr = new MemoryStream()) 
{ 
    var binFormatter = new BinaryFormatter(); 
    binFormatter.Serialize(memStr, objectToCopy); 
    memStr.Position = 0; 
    return (T) formatter.Deserialize(memStr); 
} 
} 
+0

Кажется, что OP хочет создать копию данных. Глубокий клон объекта не будет делать этого, поскольку он сохранит те же самые ключи. –

Смежные вопросы