工作单元,通用存储库,EF 5.0大量记录

时间:2012-11-05 22:51:44

标签: entity-framework repository-pattern unit-of-work

根据下面的分析器,即使禁用了延迟加载,我的查询也需要很长时间才能返回结果:

enter image description here

这是我的疑问:

enter image description here

这是我的存储库,我在做一些荒谬的事情,只记录一条记录:

enter image description here


问题:


  1. 有人能告诉我说什么是正确的程序,100条记录并尽快返回,这样用户就不必等待很长时间(使用工作单元/存储库模式)?

  2. EF如何知道如何将此信息分页到网格,以便下一批100条记录可供用户和下一批使用,依此类推?

  3. 我不明白我是否有.Take(1)为什么探查器会返回73,722行?

1 个答案:

答案 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();
}