Экземпляр ObjectContext удален и больше не может использоваться для операций, требующих подключения.

У меня возникли проблемы с одним из моих запросов из-за функций отслеживания изменений и отложенной загрузки EF. Дело в том, что после того, как я получаю результат запроса, я использую AutoMapper для сопоставления объектов домена с моей бизнес-моделью, но он продолжает выдавать исключение, потому что контекст был удален.

Экземпляр ObjectContext удален и больше не может использоваться для операций, требующих подключения.

Когда я смотрю на результирующую коллекцию в отладчике, я вижу, что это список DynamicProxy, а не фактическая сущность. Я пытался остановить отслеживание изменений, но это не помогло. Вот мой код:

    public List<ContentTypeColumn> GetContentTypeColumns(Int64 contentTypeId)
    {
        List<ContentTypeColumn> result = new List<ContentTypeColumn>();
        using (SCGREDbContext context = new SCGREDbContext())
        {                
            ContentType contentType = context.ContentTypes.Include("Parent").AsNoTracking().FirstOrDefault(x => x.Id.Equals(contentTypeId));

            result.AddRange(contentType.ContentTypeColumns.ToList());
            while (contentType.Parent != null)
            {
                result.AddRange(contentType.Parent.ContentTypeColumns.ToList());
                contentType = contentType.Parent;
            }    
        }
        return result.ToList();
    }

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


comment
Ленивая загрузка? Это вызвало бы это.   -  person Craig Stuntz    schedule 04.10.2012
comment
Я знаю, и я пытаюсь избежать ленивой загрузки в этом конкретном случае, но я не могу найти способ обойти это. Какие-либо предложения?   -  person Kassem    schedule 04.10.2012


Ответы (1)


Если вам нужно остановить ленивую загрузку и динамическое отслеживание изменений, вы можете просто отключить это:

using (SCGREDbContext context = new SCGREDbContext())
{   
    context.Configuration.ProxyCreationEnabled = false;
    ...
}
person Ladislav Mrnka    schedule 04.10.2012
comment
Идеально! Это просто сэкономило мне столько времени! - person Tyler Jones; 25.02.2014