EF 4.1 Code First Detaching Entity - PullRequest
0 голосов
/ 26 ноября 2011

Я пытаюсь добавить объект в БД.После того как я добавил его, я хочу отсоединить его, чтобы я мог безопасно управлять объектом, не внося никаких изменений в БД.После вызова context.SaveChanges() я делаю следующее, чтобы отсоединить сущность:

    // save
    context.Stories.Add(story);

    // attach tags. They already exists in the database    
    foreach(var tag in story.Tags)
      context.Entry(tag).State = System.Data.EntityState.Unchanged;

    context.SaveChanges();

    context.Entry(story).State = System.Data.EntityState.Detached;

Однако изменение состояния сущности на DETACHED приведет к удалению всех связанных сущностей, связанных с моей сущностью.Есть ли способ остановить это?

Если я не отсоединяю объект, все мои изменения будут отправлены в БД при следующем вызове context.SaveChanges()

Спасибо !!

Ответы [ 2 ]

0 голосов
/ 26 ноября 2011

Я думаю, что есть два способа решения этой проблемы:

  • Purist: извлечение сущностей из DbContext и изменение их без сохранения - это неправильное использование инструментов и архитектуры.Вместо этого используйте DTO.
  • Pragmatic: вы можете использовать AsNoTracking() для извлечения графа сущностей, который не будет отслеживаться контекстом для изменений.
0 голосов
/ 26 ноября 2011

Нет пути.Это ограничение EF.Возможны следующие варианты:

  • Не использовать тот же контекст для другого сохранения (один экземпляр контекста = одно сохранение)
  • Снова извлечь объект из базы данных, используя другой экземпляр контекста, который не будет использоватьсядля сохранения
  • Создайте глубокий клон вашей сущности и используйте клонированный (глубокий клон выполняется путем сериализации и немедленной десериализации = ваш граф сущностей должен быть сериализуемым)
...