实体框架 DbContext 正在释放
本文关键字:释放 DbContext 框架 实体 | 更新日期: 2023-09-27 17:55:26
我有一个使用ObjectListView可视化数据库信息的小程序。目前,我正在尝试添加项目并不断获得The operation cannot be completed because the DbContext has been disposed.
这突出显示了下面的olvEntityTypes.AddObject(et);
行。
法典:
string typeName = tbTypeName.Text;
string desc = tbDesc.Text;
EntityTypes et;
using (FCERTSModelContainer db = new FCERTSModelContainer())
{
// Create and save new row for the EntityTypes table.
et = new EntityTypes { EntityTypeName = typeName, Description = desc };
db.EntityTypes.Add(et);
db.SaveChanges();
olvEntityTypes.AddObject(et);
}
- 我怀疑
SaveChanges()
也可能关闭上下文,但尝试在保存更改之前添加对象仍然会引发相同的错误。 - 将
olvEntityTypes.AddObject(et);
放在using
块之外也是失败的。 - 如果我使用如下所示的内容查询数据库,则不会引发任何错误;
法典:
var query = from ent in db.EntityTypes
orderby ent.EntityTypeName
select ent;
olvEntityTypes.SetObjects(query);
所以我现在有点不知所措,为什么这会抛出错误以及如何解决它。
事实证明,问题在于对象列表视图对象的初始设置。我正在使用这段代码;
var query = db.EntityTypes.OrderBy(eg => eg.EntityTypeName);
olvEntityTypes.SetObjects(query);
这工作正常,但在我的代码库中处于不同的using
块中,因此,这是一个完全不同的 DbContext。
如果我将查询转换为 List,然后调用 SetObjects()
则整个程序可以正常工作。