1

我有这个类,我经常(但不总是)在使用方法 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();
    }

}

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

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

}
4

1 回答 1

4

在进行更新时,不要让 StoreDbContext 一直徘徊。它最终会包含陈旧的数据/实体。公认的模式是为一个工作单元/范围内的一组操作启动一个新的上下文。第二个示例可能是可以接受的,但您需要确保通过使用 using 语句创建上下文来处理上下文。重构方法来解决这个问题。

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

于 2013-10-11T13:57:57.943 回答