【发布时间】:2016-09-30 10:33:53
【问题描述】:
我正在查看我网站上每个页面加载运行的 SQL 查询数量。
以下方法在 Promotion 表中运行 1 个 SQL 查询 PER 条目。
public IEnumerable<Promotion> GetPromotionsForStore(Store store)
{
return Get().Where(p => p.ValidForStores.Select(s => s.Id).Contains(store.Id));
}
“ValidForStores”是一个包含“Promotion_Id”和“Store_Id”的链接表。 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 的期望过高?
【问题讨论】:
-
我可以建议您从数据库中获取一次数据,然后对每个条目执行您的操作。
-
Get()方法的返回type是什么?
标签: c# entity-framework entity-framework-5