gpt4 book ai didi

c# - EntityFramework 中的 ObjectDisposedException

转载 作者:太空宇宙 更新时间:2023-11-03 21:40:56 26 4
gpt4 key购买 nike

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

}

最佳答案

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

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

关于c# - EntityFramework 中的 ObjectDisposedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19319955/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com