【问题标题】:ObjectContext Closed error when using Include?使用 Include 时出现 ObjectContext Closed 错误?
【发布时间】:2011-11-02 02:33:05
【问题描述】:

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

.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 的新手,并且仍在努力解决。

【问题讨论】:

    标签: c# linq entity-framework objectquery


    【解决方案1】:

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

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

    请记住,您使用的扩展方法每个都返回 new IQueryable&lt;T&gt;,而不是修改原始方法。

    【讨论】:

    • 哦... >.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    相关资源
    最近更新 更多