EntityFramework中的ObjectDisposedException

时间:2013-10-11 13:54:36

标签: c# entity-framework .net-4.0 entity-framework-5

我有这个类,当使用方法ExecuteQuery时,我经常(但不总是)得到NullReferenceException或ObjectDisposedException:

public class Dao
{
    protected StoreDbContext Context = new StoreDbContext();

    public IEnumerable<T> ExecuteQuery<T>(string query, params object[] parameters)
    {
        return  Context.Database.SqlQuery<T>(query, parameters).ToList();
    }

}

但是,如果我将在方法中创建Context,我不会得到任何异常。为什么呢?

public class Dao
{
    protected StoreDbContext Context = new StoreDbContext();

    public IEnumerable<T> ExecuteQuery<T>(string query, params object[] parameters)
    {
        return  new StoreDbContext().Database.SqlQuery<T>(query, parameters).ToList();
    }

}

1 个答案:

答案 0 :(得分:4)

执行更新时不要让StoreDbContext保持不变。最终会有过时的数据/实体。接受的模式是为工作单元/范围操作集启动新的上下文。第二个示例可能是可接受的,但您需要确保通过使用using语句创建上下文来处置它。重构方法以解决这个问题。

我倾向于将搜索结果保存在单独的上下文中,没有跟踪(只读),但会使用新的上下文进行更新,因为我正在使用WCF数据服务。