【发布时间】:2015-02-15 02:33:21
【问题描述】:
我正在编写一些代码来使用 EntityFrameWork 访问数据库。代码是:
public IEnumerable<Rows> GetRows(int id)
{
using (var context = new ApplicationDbContext())
{
var repository = new EntityFrameWorkRepository<int, RowEntity>(context);
//need a ToList() here to prevent disposed dbcontext errors
return repository.GetRowsFromDb(id).ToList();
}
}
GetRowsFromDb() 使用 LINQ 查询数据库并使用 id 过滤结果。
我最初在没有调用 ToList() 的情况下编写了上述方法,但是当我尝试访问返回的 IEnumerable 中的对象时,我会收到一个关于已处置 dbcontext 的异常。我不明白上面的代码是如何解决问题的,尽管它确实可以工作。我假设 ToList() 正在深度复制对象,这可能提供了与上下文/数据库所需的分离,但原始对象肯定应该可用吗?
【问题讨论】:
-
IEnumerables是惰性的,因此上下文将在调用方法中获取任何结果之前被释放。ToList让事情变得急切。 -
搜索“LINQ 延迟执行”
标签: c# linq entity-framework asp.net-mvc-5