Отсоединение сущности вместе с ссылочными сущностями - PullRequest
2 голосов
/ 18 марта 2009

Хорошо, я планирую разработать проект с использованием Entity Framework. Пока я пытался провести некоторые исследования и разработки, прежде чем приступить к ее реализации, я обнаружил эту проблему, надеюсь, некоторые из вас, люди, помогут мне найти решение.

У меня есть сущность с именем «Person», на которую ссылается сущность «Members» с отношением один-ко-многим (1: N). Задача будет состоять в том, чтобы запросить сущность Person вместе с соответствующей коллекцией Members и передать ее на уровень представления для просмотра, изменения или удаления поверх нее, а затем измененный объект сущности будет передан обратно на уровень модели для присоединения сущности к контексту. и сохраните его в БД.

Насколько я отсоединяюсь / прикрепляю w.r.t. единый объект типа «Персона» и сохранение его в БД - все работает абсолютно нормально. Но когда я пытаюсь запросить сущность (Person) с ее сущностью, на которую ссылаются (Member), и отсоединить ее, чтобы я мог отправить ее на уровень представления. Я обнаружил, что получаю только коллекцию сущностей Person, и эталонная коллекция сущностей Member полностью удаляется после отделения ее от контекста.

Здесь я вставляю свой фрагмент кода для справки:

using (GOLProfessionalEntities context = new GOLProfessionalEntities())
{
     ObjectQuery<Person> query =
        context.Person.Include("Members");

     var person = query.First();
     context.Detach(person);

     return person;
}

Я был бы очень рад, если бы кто-нибудь предложил решение этой проблемы.

Спасибо заранее. -ssak32

Ответы [ 2 ]

2 голосов
/ 31 августа 2009

Вы можете установить MergeOption для ObjectQuery на NoTracking. Таким образом, Person не будет прикреплен к ObjectContext в первую очередь.

            using (GOLProfessionalEntities context = new GOLProfessionalEntities())
            {
                ObjectQuery<Person> query =
                   context.Person.Include("Members");
                query.MergeOption = MergeOption.NoTracking;// <--

                var person = query.First();

                return person;
            }

Я так опоздал с ответом, который может кому-то помочь.

0 голосов
/ 06 мая 2009

Полагаю, вам необходимо также отсоединить каждого участника:

использование (GOLProfessionalEntities context = new GOLProfessionalEntities ()) { ObjectQuery query = context.Person.Include ( "Пользователи");

 var person = query.First();


 while (person.Member.Count > 0)
 {
     context.Detach(person.Member.First());
 }


 context.Detach(person);

 return person;

}

Я надеюсь, что это работает.

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