Использование ядра платформы Entity Framework Я пытаюсь отобразить объект, содержащий дочернюю коллекцию. Без проекта. Сгенерированный SQL содержит предложение where и извлекает только объекты, принадлежащие дочерней коллекции. Когда я добавляю projectTo, результат равен, но, глядя на 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();
Без проекта я вижу следующий SQL в профилировщике
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
С проектом я вижу это. Нет, где включено предложение.
SELECT [r].[ParentId], [r].[Id]
FROM [Child] AS [r]
Я думал, что Id оставить в AsNoTracking, если у DTO были субильные объекты, которые по какой-то причине не были сопоставлены объектам DTO. В любом случае комментирование как AsNoTracking, так и Include не имело никакого значения. Я по-прежнему вижу запрос на выборку дочерних элементов без предложения where – Stephen