Entity Framework Отсоединить сущность и связанные сущности ушли

Когда я использую Entity Framework, я хочу запросить запись в контексте и добавить ее в другой контекст с той же схемой, после запроса записи я отсоединяю ее от контекста, но все связанные объекты удалены, есть любой способ решить это?

Заранее спасибо!

 Yuck14 дек. 2011 г., 18:53
Что вы имеете в виду«все связанные объекты отсутствуют»?

Ответы на вопрос(2)

как загрузить дочерние объекты? Если это так, вы можете загружать с помощью метода .Include. Учитывая класс Person и класс PhoneNumber, где Person имеет коллекцию PhoneNumber, вы можете сделать следующее:

List<Person> People = db.People.Where(p => p.Name = "Henry")
                               .Include("PhoneNumbers")
                               .ToList();

Или вы можете сделать то, что называется явной загрузкой, когда вы загружаете свои сущности и вызываете метод .Load для коллекций дочерних и связанных сущностей, которые вы хотите загрузить. Обычно вы делаете это, когда у вас не включена поддержка LazyLoading (и LazyLoading включена по умолчанию в 4.0+, не вызывать в предыдущих версиях).

Независимо от того, как вы запрашиваете и загружаете их, вам придется отсоединять сущности, которые вы хотите присоединить к другому контексту.

Вот ссылка на довольно хороший MSDNстатья о загрузке объектов.

 James15 дек. 2011 г., 04:11
Спасибо за ваш ответ!
 CodeWarrior15 дек. 2011 г., 06:53
Нет проблем. Пожалуйста, не забудьте проголосовать за посты, которые помогут вам.
Решение Вопроса

по замыслу". EF может отсоединять объекты только один за другим, но в то же время EF не поддерживает графы объектов, состоящие из прикрепленных и отсоединенных объектов. Из-за этого, когда вы отсоединяете сущность, это нарушит все отношения с остальным графом прикрепленных объектов. Отключение целого графа объектов в настоящее время не поддерживается, но вы можете проголосовать за эту функцию наДанные UserVoice.

В качестве обходного пути вы можете отключить отложенную загрузку вашего контекста, используйте активную загрузку, описанную @CodeWarrior, чтобы загрузить именно те данные, которые вам нужно передать в другой контекст. Как только вы загрузите данные, сериализуйте их в поток и немедленно десериализуйте в новый экземпляр графа объектов. Это способ сделать глубокий клон графа сущностей, который отсоединен, но имеет все отношения без изменений (необходимо отключить ленивую загрузку, иначе сериализация также загрузит все другие свойства навигации, что может привести к гораздо большему объектному графу, чем ожидалось). Единственное требование состоит в том, что ваши сущности должны быть сериализуемы по вашему выбору (по вашему усмотрению), чтобы иметь циклические ссылки, которые обычно требуют некоторой специальной обработки или дополнительных атрибутов для ваших сущностей).

 James15 дек. 2011 г., 04:11
Спасибо за ваш ответ!

Ваш ответ на вопрос