Экземпляр ObjectContext был удален и больше не может использоваться для операций, требующих подключения - PullRequest
0 голосов
/ 29 февраля 2012

enter image description here

Я пытаюсь запросить UserMetaData для одной записи, используя следующий запрос

 using (JonTestDataEntities context = new JonTestDataEntities())
            {
                return context.UserMetaData.Single(user => user.User.ID == id);               
            }

Я получаю сообщение об ошибке: экземпляр ObjectContext был удален и больше не может использоваться для операций, требующих подключения. Он пытается загрузить группу для записи UserMetaData. Как я могу изменить свой запрос, чтобы предотвратить эту ошибку?

Ответы [ 2 ]

3 голосов
/ 29 февраля 2012

Как говорится в сообщении, вы не можете лениво загрузить его после возврата функции, потому что вы уже удалили контекст.Если вы хотите иметь доступ к Group, вы можете убедиться, что получили его раньше.Вы можете выразить метод расширения .Include(entity => entity.NavigationProperty):

using (JonTestDataEntities context = new JonTestDataEntities())
{
    return context.UserMetaData.Include(user => user.Group).Single(user => user.User.ID == id);
}

Также рассмотрите возможность добавления .AsNoTracking(), так как ваш контекст все равно исчезнет.

1 голос
/ 29 февраля 2012

Вам необходимо создать строгий тип, соответствующий подписи вашего набора результатов.Entity Framework создает анонимный тип, и анонимный тип удаляется после того, как оператор using выходит из области видимости.

Таким образом, присвоение строгому типу позволяет полностью избежать этой проблемы.Я бы рекомендовал создать класс с именем UserDTO, поскольку в этом случае вы действительно создаете объект передачи данных.Преимущество выделенного DTO состоит в том, что вы можете включать только необходимые свойства, чтобы ваш ответ был как можно более легким.

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