Entity framework 4 简单的存储库模式问题:如何高效地跨多个存储库进行查询?

Entity framework 4 简单的存储库模式问题:如何高效地跨多个存储库进行查询?,entity-framework-4,repository-pattern,Entity Framework 4,Repository Pattern,如果从存储库返回IList(T) 当您将数据连接在一起时,如何高效地创建SQL查询 是否需要为这些方法公开IQueryable/IEnumerable数据结构?这对我来说很糟糕 或 我是否缺少一些基本概念 现在我有一个存储库方法,如: IList<T> Get( Expression(...) filter, Expression(...) sort, int skip, int take) IList Get(表达式(…)过滤器、表达式(…)排序、int skip、int tak

如果从存储库返回IList(T)

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

是否需要为这些方法公开IQueryable/IEnumerable数据结构?这对我来说很糟糕

我是否缺少一些基本概念

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

IList<T> Get( Expression(...) filter, Expression(...) sort, int skip, int take)
IList Get(表达式(…)过滤器、表达式(…)排序、int skip、int take)

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

不需要公开
IQueryable
,但如果不公开,则会遇到您所描述的问题:无法进一步组合查询

一种解决方案是在存储库前面放置一个实体服务层。服务层不知道EF,但可以进行LINQ投影。在LINQ中进行投影将生成一个组合的单个DB查询


我有一个演示。

公开
IQueryable
不是所需的,但是如果你不这样做,你就会遇到你所描述的问题:你不能进一步组合查询

一种解决方案是在存储库前面放置一个实体服务层。服务层不知道EF,但可以进行LINQ投影。在LINQ中进行投影将生成一个组合的单个DB查询


我有一个演示。

为了清楚起见,我为每个实体都提供了一个存储库,它返回IList并立即查询数据。因此,如果我想获得一组客户和相应的订单,我需要以某种方式将这组客户发送到订单存储库中作为过滤器。嘿,这主意不错。否则,我会得到我想要的客户和每一份订单,然后扔掉所有我不需要的订单。因此,如果我想获得一组客户和相应的订单,我需要以某种方式将这组客户发送到订单存储库中作为过滤器。嘿,这主意不错。否则,我会得到我想要的客户和每一份订单,然后扔掉所有我不需要的订单。