如何使用庞大的数据集有效地实现存储库模式? (寻呼等)

时间:2016-03-21 21:50:37

标签: asp.net-mvc entity-framework design-patterns

我正在看微软给出的这个例子,我完全明白了他们要做的事情:http://www.asp.net/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application

我的问题是:在进行分页或处理大量数据集(数百万或更多记录)时,如何有效地实现这一点?我读取此代码的方式,每次从repo调用GetStudents时,它都会列出整个数据集。如何使用存储库有效地实现搜索,排序和分页(我在应用程序中有效地定义,不必查询所有行来执行过滤/分页/排序操作)?在我的特定情况下,我谈论的是实体框架。我过去曾使用IQueryable进行高效查询,但我没有看到使用存储库模式生成高效存储查询的方法。请帮忙!

2 个答案:

答案 0 :(得分:0)

阅读您提到的文章,您应该删除.ToList()。这将回归一个可以愚弄的巫婆#懒惰的电话"你的数据库。

正如示例所示:

var students = from s in context.Students
               select s;

要点是:当你拥有大型存储库时,永远不要查询整个存储库。始终使用WHERE标准。 分页结果可能在内存(应用程序)或数据库中完成。这真的取决于你的环境和需求。

答案 1 :(得分:0)

如果您查看链接到的页面底部,您将看到并带有过滤示例:

public virtual IEnumerable<TEntity> Get(
        Expression<Func<TEntity, bool>> filter = null,
        Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
        string includeProperties = "")

Get函数在使用toList()实现查询之前应用过滤器。如果要添加分页,您可以添加参数,以便在实现之前将.Top()和.Skip()应用于您的查询。