ObjectContext实例已被释放,不能再用于需要连接的操作

时间:2012-10-04 16:57:04

标签: entity-framework lazy-loading entity-framework-5 objectcontext change-tracking

由于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();
    }

注意:如果您需要查看此操作中涉及的域模型,可以参考this question.

1 个答案:

答案 0 :(得分:19)

如果您需要停止延迟加载和动态更改跟踪,只需将其关闭即可:

using (SCGREDbContext context = new SCGREDbContext())
{   
    context.Configuration.ProxyCreationEnabled = false;
    ...
}