根据下面的分析器,即使禁用了延迟加载,我的查询也需要很长时间才能返回结果:
这是我的疑问:
这是我的存储库,我在做一些荒谬的事情,只记录一条记录:
问题:
有人能告诉我说什么是正确的程序,100条记录并尽快返回,这样用户就不必等待很长时间(使用工作单元/存储库模式)?
EF如何知道如何将此信息分页到网格,以便下一批100条记录可供用户和下一批使用,依此类推?
我不明白我是否有.Take(1)为什么探查器会返回73,722行?
答案 0 :(得分:3)
您的dbSet.ToList()
导致LINQ-to-Entities查询执行(并且说“请将整个表从数据库加载到内存中”),而不是Take(1)
。这适用于已加载的结果,而不是数据库查询。
您只需要更改顺序:
dbSet.Take(1).ToList()
这将只查询数据库中的一个元素(在SQL中使用TOP 1
)。要获取分页的下一条记录,您可以使用Skip
(与Take
一起使用),例如:
public IEnumerable<T> GetPage(int pageNumber, int entitiesPerPage)
{
return dbSet
.Skip((pageNumber - 1) * entitiesPerPage)
.Take(entitiesPerPage)
.ToList();
}