你能帮我解决这个错误吗?
Cannot access a disposed object.
Object name: 'DataContext accessed after Dispose.'.
在我的GUI中
private void InitializePage()
{
cbCategory.DataSource = stock.StockCategory.Get();
}
在Datamodel
中 public IEnumerable<StockCategory> Get()
{
using (leDataContext db = new leDataContext())
{
try
{
var r = from s in db.StockCategories
select s;
return r;
}
catch (Exception ex)
{
Logger.Error(typeof(StockCategory), ex.ToString());
throw;
}
}
}
答案 0 :(得分:12)
您正在处置DataContext
但返回仍然依赖它的内容。
选项:
DataContext
。我知道这听起来很奇怪,但LINQ to SQL团队的指导(好吧,Matt Warren)已经指出,在大多数案例中(即如果你没有做任何不寻常的事情)处理不是需要ToList()
方法的Get()
块中调用{/ 1}} 。请注意,使用仅具有退化查询的查询表达式是毫无意义的。 (如果这在您自己的代码中,即使隐式using
实际上也不会有用。)
我建议您将方法更改为:
Select(s => s)
答案 1 :(得分:4)
由于存在延迟加载,查询并未真正在linq语句行上执行。它在你循环时执行,或者在这种情况下 - 当你运行ToList时执行。
当它被执行时,它必须在数据上下文中......这不是这里的情况。您可以从Get方法返回List,也可以将cbCategory.DataSource值的设置插入using (leDataContext...)
范围。