Я думаю, что вы можете рассматривать CustomerSummaryViewModel как отчет (CustomerSummaryReport). Можно запросить у ваших сущностей сценарии, подобные этому, и рассматривать их как отчеты. Большинство отчетов являются более сложными, с использованием нескольких объектов и совокупных запросов. Этот отчет очень прост, но вы все равно можете использовать его как отчет.
Вы также упоминаете, что производительность значительна. Это еще одна причина использовать отдельный отчетный запрос и DTO. Сущность клиента звучит как одна из «основных» сущностей, которые вы используете. То, что для извлечения их из базы данных с отложенными загруженными свойствами не инициализируется значительное время, может быть предупреждением для оптимизации самой сущности клиента, вместо этого используется запрос отчетов для получения информации о них. Просто предупреждение, потому что я видел случаи, когда это было необходимо.
Кстати, вы можете рассмотреть linq вместо проекций для более простого синтаксиса, такого как:
var reports = session.Linq<Customer>()
.Where(condition)
.Select(customer => new Report
{
FirstName = customer.FirstName,
LastName = customer.LastName
})
.ToList();