EF运行多个查询 - 如何更改为使用一个查询?

时间:2016-06-01 07:32:19

标签: c# entity-framework entity-framework-5

我正在查看我网站上每页面加载的SQL查询量。

以下方法在Promotion表中运行1个SQL查询PER条目。

public IEnumerable<Promotion> GetPromotionsForStore(Store store)
{
    return Get().Where(p => p.ValidForStores.Select(s => s.Id).Contains(store.Id));
}

&#39; ValidForStores&#39;是一个链接表,其中包含&#39; Promotion_Id&#39;和&#39; Store_Id&#39;。 Get()基本上最终会返回IDbSet<Promotion>

如果我把它写成普通的SQL查询,我可以在仍然进行商店检查的同时带回所有促销,但是所有这些都有一个查询,但是在这种情况下,EF会多次运行查询。

SELECT 
[Extent2].[Id] AS [Id], 
[Extent2].[StoreName] AS [StoreName], 
[Extent2].[IsDefault] AS [IsDefault], 
[Extent2].[ThemeName] AS [ThemeName], 
[Extent2].[AdminStore] AS [AdminStore], 
[Extent2].[UrlAffix] AS [UrlAffix], 
[Extent2].[WebsiteId] AS [WebsiteId], 
[Extent2].[CategoryId] AS [CategoryId]
FROM  [dbo].[PromotionStore] AS [Extent1]
INNER JOIN [dbo].[Store] AS [Extent2] ON [Extent1].[Store_Id] = [Extent2].[Id]
WHERE [Extent1].[Promotion_Id] = 41

任何人都可以建议进行更改,这意味着会使用单个查询,还是我对EF的期望过高?

1 个答案:

答案 0 :(得分:2)

您的Get()方法很可能正在返回IEnumerable<Promotion>。要执行单个查询,请将其替换为IQueryable<Promotion>等效项,例如

return context.Promotions.Where(...);