【发布时间】:2011-05-18 17:37:17
【问题描述】:
我正在使用 ASP.NET 4.0。
我有以下代码返回错误“无法访问已处置的对象。 对象名称:'Dispose 后访问的 DataContext。'。"
public IEnumerable<BatchHeader> GetHeaders()
{
using(NSFChecksDataContext context = DataContext)
{
IEnumerable<BatchHeader> headers = (from h in context.BatchHeaders
select h);
return headers;
}
}
如果我将其更改为:
public IEnumerable<BatchHeader> GetHeaders()
{
using(NSFChecksDataContext context = DataContext)
{
return context.BatchHeaders.ToList();
}
}
它会正常工作的。我正在使用这种方法来填充 RadGrid。谁能解释一下为什么第二种方法行得通,但第一种不行?
谢谢。
【问题讨论】:
-
一篇不错的文章解释了惰性求值:blogs.msdn.com/b/pedram/archive/2007/06/02/…
-
有很多文章提倡让
DataContext自然地进行垃圾收集,而不是在上面调用Dispose。我意识到这冒犯了纯粹主义者,但是......见leedumond.com/blog/about-disposing-the-datacontext和lee.hdgreetings.com/2008/06/linq-datacontex.html
标签: c# linq linq-to-sql datacontext