ObjectContext实例已被释放,不能再用于需要连接的操作

时间:2013-05-04 08:53:21

标签: c# entity-framework user-controls lazy-loading

我正在使用User Controls构建我的应用程序,因此我有主表单,并使用以下代码显示用户控件:

        Modules.CtrlListContractors mo = new Modules.CtrlListContractors();
        splitContainerControl.Panel1.Controls.Clear();
        splitContainerControl.Panel1.Controls.Add(mo);

并且在User Control内我可以添加任何内容,但我对此错误消息的问题是:

The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.

我与GridView CtrlListContractors内显示为CtrlListContractors的表有一些关系,当我点击菜单按钮显示Lazy Loading时,我收到上述错误消息,我认为这是因为大约using (ContractorsEntities context = new ContractorsEntities(Properties.Settings.Default.Connection)) { memberBindingSource.DataSource = context.Members.ToList(); } 因此需要执行更多查询以从相关表中获取其他数据。

我有这个代码在User Control Load事件中执行:

{{1}}

我认为如果我可以在ObjectContext处理之前从同一个查询中获取主表和相关表中的所有数据,问题就会解决

1 个答案:

答案 0 :(得分:3)

如果您要处置ObjectContext(或DbContext),则必须首先获取所有所需的数据。包括相关实体。

可以使用Include完成,有两个重载:Include(string)和更多strongly typed Include(可从EF 4.1获得)

所以,假设有Member (0-1) ---- (*) Contractors的关系,你可以Include收藏:

context.Members.Include(x => x.Contractors).ToList();

但正如我所说,在处理上下文之前,您必须包含所需的所有。或者不处理上下文并懒惰地加载细节。