我正在使用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处理之前从同一个查询中获取主表和相关表中的所有数据,问题就会解决
答案 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();
但正如我所说,在处理上下文之前,您必须包含所需的所有。或者不处理上下文并懒惰地加载细节。