ObjectContext使用Include时出现关闭错误?

时间:2011-08-23 16:07:19

标签: c# linq entity-framework objectquery

我正在尝试为实体框架创建一个通用的Get方法,其中包含动态WhereInclude。我正在使用下面的代码,但是当我尝试访问包含列表中的导航属性时,我收到关于对象上下文被关闭的错误

是不是.Include()应该加载这些对象,所以我不需要保持ObjectContext打开?

public static List<T> GetList<T>(Func<T, bool> where, string[] includes)
    where T : EntityObject
{
    using (var context = new TContext())
    {
        ObjectQuery<T> q = context.CreateObjectSet<T>();
        foreach (string navProperty in includes)
        {
            q.Include(navProperty);
        }

        return q.Where<T>(where).ToList();
    }
}

代码导致错误:

var x = DAL<MyContext>.GetList<MyEntity>(
                p => p.Id == 1
                , new string[]{ "Type" } );

var y = x.Type;  // Throws an error that context has been closed

我觉得我必须在这里犯一些愚蠢的错误,因为我是EF的新手,我仍然想弄明白。

1 个答案:

答案 0 :(得分:3)

您没有重新分配q - 这应该解决它:

    foreach (string navProperty in includes)
    {
        q = q.Include(navProperty);
    }

请记住,您正在使用的扩展方法各自返回 IQueryable<T>,而不是修改原始文件。