2013-01-23 141 views
2

我有一个小程序,使用ObjectListView可视化数据库信息。目前我正在尝试添加项目并继续获取The operation cannot be completed because the DbContext has been disposed.这是突出显示olvEntityTypes.AddObject(et);下面的一行。实体框架DbContext得到处置

代码:

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

所以我在一个小的损失的现在,为什么这是投掷的错误,以及如何解决它。

+0

它只是一个ObjectListView。除了映射列之外,我没有触及它,这些都是通过GUI /设计器完成的。我不知道为什么它甚至需要用于AddObject的DbContext,但不用于SetObject? – Trent

回答

3

事实证明,问题是objectlist的对象的初始设置。我正在使用这段代码;

var query = db.EntityTypes.OrderBy(eg => eg.EntityTypeName); 
olvEntityTypes.SetObjects(query); 

这在我的代码库,因此,一个完全不同的DbContext工作正常,但在不同的using块。

如果我将查询转换为列表然后调用SetObjects()整个程序工作正常。