Entity Framework Core 사용 하위 컬렉션을 포함하는 엔터티를 매핑하려고합니다. without projectTo 생성 된 SQL에는 where 절이 포함되며 하위 컬렉션에 속한 엔터티 만 가져옵니다. 내가 프로젝트를 추가 할 때, 은이 맞지만 SQL을 보았을 때 나는 where 절을 볼 수 없다. 자식 유형의 모든 엔티티를로드 한 다음 메모리에서 위치를 나타냅니다. 컬렉션에서 모든 종류의 매핑을 시도했지만 아무 것도이 동작을 변경하는 것 같습니다. 이 쿼리를 향상시킬 수있는 방법이 있습니까?Automapper projectTo 생성 된 SQL에는 where 절이 없습니다.
문제의 코드는 다음과 같습니다
var parent = _context
.Parents
.Where(a => a.FamilyId == familyId && a.Id == id)
.Include(r => r.Children)
//.ProjectTo<ParentDetailViewModel>()
.AsNoTracking() // In case projection contains sub entities
.SingleOrDefault();
프로젝트없이 내가 프로파일 러 나는이 볼 프로젝트와
exec sp_executesql N'SELECT [r].[Id], [r].[FieldOne], [r].[Cid], [r].[FieldTwo], [r].[ParentId]
FROM [Child] AS [r]
WHERE EXISTS (
SELECT TOP(2) 1
FROM [Parent] AS [a]
WHERE (([a].[FamilyId] = @__familyId_0) AND ([a].[Id] = @__id_1)) AND ([r].[ParentId] = [a].[Id]))
ORDER BY [r].[ParentId]',N'@__familyId_0 int,@__id_1 int',@__familyId_0=1,@__id_1=1
에서 다음 SQL을 볼 수 있습니다. Where 절은 포함되지 않습니다.
SELECT [r].[ParentId], [r].[Id]
FROM [Child] AS [r]
DTN에 DTO 객체에 매핑되지 않은 하위 엔티티가있는 경우 Id가 AsNoTracking에 남아 있다고 생각했습니다. 어쨌든 AsNoTracking과 Include를 주석 처리하면 아무런 차이가 없습니다. where 절없이 실행중인 자식을 가져 오는 쿼리를 계속 볼 수 있습니다. – Stephen