Как лучше всего дублировать сущности, но с новыми ключами? - PullRequest
1 голос
/ 30 октября 2011

У меня есть база данных, в которой хранятся календари, эти календари распределены по нескольким таблицам, использующим FK для каждой таблицы ...

Все работает, но теперь я хочу сказать

Создание нового календаря со всеми его функциями на основе календарного кода: 62

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

Есть ли более быстрое решение?

Способ, которым мы могли бы просто сказать

db.Entity<Calendar>(CalendarId).CloneAsNew();

так что я бы в итоге:

[Table Calendars]
calendar_id    Name    Url
62             Cal_A   url_A
74             Cal_A   url_A

[Table CalendarContents]
content_id   calendar_id  type   img_background    img_top
14           62           1      bkg.png           top.png
26           74           1      bkg.png           top.png

имел только один календарь раньше, как

[Table Calendars]
calendar_id    Name    Url
14             Cal_A   url_A

[Table CalendarContents]
content_id   calendar_id  type   img_background    img_top
14           62           1      bkg.png           top.png

PS Если вы отсоедините и присоедините его снова как

context.Detach(entity);
entityCollection.Add(entity);

мы теряем все ссылки: - /

Ответы [ 2 ]

0 голосов
/ 30 октября 2011

EF не предоставляет никакого способа клонирования графа сущностей.В настоящее время у вас есть общие решения:

  • Создайте хранимую процедуру для клонирования вашего календаря, отобразите ее как функцию импорта и используйте ее для клонирования и получения идентификатора нового календаря.Когда у вас есть Id, выполните новый запрос для загрузки всего графа сущностей для нового календаря.
  • Получите граф сущностей для всего старого календаря и создайте глубокий клон (необходимо сериализовать граф сущностей в поток и десериализовать его обратнона новый граф сущности).Добавьте новый граф сущностей в контекст и сохраните изменения.Он должен вставить все объекты в новый график.
0 голосов
/ 30 октября 2011

Попробуйте: (с EF 4.1)

Получите календарь, который вы хотите скопировать, с помощью метода расширения NoTracking в запросе.Затем измените Id на 0 и сделайте:

Context.Entry (календарь) .State = EntityState.Added;

Context.SaveChanges ();

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