내 웹 사이트에서 페이지로드 당 실행되는 SQL 쿼리의 양을 검토 중입니다.EF 여러 쿼리 실행 - 어떻게 한 쿼리를 사용하도록 변경할 수 있습니까?
다음 메소드는 프로모션 테이블에서 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() 메소드의 return ** type **은 무엇입니까? –