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