2010-10-26 11 views
1

如果您从存储库返回IList(T)...简单存储库模式问题:如何有效地跨多个存储库查询?

当您将数据连接在一起时,如何有效地创建SQL查询?

是否需要为这些方法公开IQueryable/IEnumerable数据结构?这对我来说是不好的。

或者

我缺少一些基本的概念?

现在我有一个存储库的方法,如:

IList<T> Get(Expression(...) filter, Expression(...) sort, int skip, int take) 

其中null表示获取所有。这很有效,直到我想查找一组客户的所有订单而不对每个客户进行查询。

+0

为了清楚起见,我为每个返回IList <>的实体创建一个存储库,该存储库立即查询数据。所以,如果我想获得一组客户和相应的订单,那么我需要以某种方式将这组客户发送到订单存储库以充当过滤器。嘿,这不是一个坏主意。否则,我会得到我想要的客户,然后每一个订单,然后扔掉我不需要的所有订单。 – 2010-10-26 21:38:28

回答

1

它不是需要暴露IQueryable<T>,但如果你不这样做,那么你碰上正是这个问题你所描述的:你不能再编写查询。

一个解决方案是将一个实体服务层放在存储库的前面。服务层是EF-ignorant,但可以执行LINQ预测。在LINQ中投影会产生一个组合的单个数据库查询。

我有一个演示here