私のウェブサイトで1ページの負荷で実行されているSQLクエリの量を確認しています。EF複数のクエリを実行する - 1つのクエリを使用するように変更するにはどうすればよいですか?
次のメソッドは、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から期待していますか?
ため、
IQueryable<Promotion>
同等と交換してください。 –'Get()'メソッドの返り値**型**は何ですか? –