Я создаю программное обеспечение, где пользователь может создать новый продукт на основе более старого продукта.
Теперь я должен сделать копирование / операции клонирования с Платформой Объекта. Сначала я начал писать как это:
foreach(sourcedata1 in table1) { ... create new table ... copy data ... create Guid ... add foreach(sourcedata2 in table2) { ... create new table ... copy data ... create Guid ... add ... and so on } }
Проблема состоит в том что это не хороший способ сделать это. Есть ли какой-либо простой способ информация о клоне (кроме Гуида, который должен быть сгенерирован для новых строк), или я должен вручную скопировать все?
Другое решение
Вы могли также использовать EmitMapper или AutoMapper, чтобы сделать копирование свойств.
Используя прямую сериализацию, вы можете сделать следующее:
Используя Reflection, но с большим количеством кода, вы можете сделать следующее: http://msmvps.com/blogs/matthieu/archive/2008/05/31/entity-cloner.aspx
Чтобы клонировать объект в Entity Framework, вы можете просто отсоединить объект от DataContext
, а затем повторно добавить его в EntityCollection
.
context.Detach(entity);
entityCollection.Add(entity);
Обновление для EF6 + (из комментариев)
context.Entry(entity).State = EntityState.Detached;
entity.id = 0;
entity.property = value;
context.Entry(entity).State = EntityState.Added;
context.SaveChanges();