У меня есть запрос EFCore, который занимает> 80 секунд.Я читал в Интернете, что массовое использование «Включить» в один запрос - плохая идея, потому что EFCore создает очень сложную строку SQL.
Как уже несколько раз предлагалось в Интернете, я начал разделять свой большой запрос.один запрос на более мелкие кусочки.
К сожалению, большинство примеров в Интернете были очень простыми.Нет случая использования ThenInclude.Кто-нибудь знает, что я могу сделать, чтобы уменьшить количество вызовов «ThenInclude» или переписать другим способом?
В этой версии запрос все еще очень медленный:
public async Task<List<TblAppointment>> GetAppointments(System.Guid activityId, System.Guid? categoryOrgId)
{
var query = _context.TblAppointment
.Join(_context.TblTour, appointment => appointment.ApmPkId, tour => tour.TouId, (appointment, tour) => new { appointment, tour })
.Where(find => !find.appointment.ApmDDeleted.HasValue && find.tour.TouOrgId.HasValue && find.tour.TouOrgId.Value == activityId)
.Select(select => select.appointment);
await query.Include(include => include.TblAppointmentQuestionnaireResult)
.ThenInclude(include => include.TblAppointmentQuestionnaireResultAnswer)
.ThenInclude(include => include.TblAppointmentQuestionnaireResultAnswerHistory)
.LoadAsync();
await query.Include(include => include.TblAppointmentQuestionnaireResult)
.ThenInclude(include => include.TblAppointmentQuestionnaireResultAnswer)
.ThenInclude(include => include.ApmqstrsanQstgrqs)
.ThenInclude(include => include.QstgrqsLst)
.ThenInclude(include => include.TblListEntry)
.LoadAsync();
await query.Include(include => include.TblAppointmentStatus)
.ThenInclude(include => include.ApmstaSta)
.LoadAsync();
await query.Include(include => include.TblAppointmentAssignment)
.ThenInclude(include => include.ApmassOrg)
.LoadAsync();
return await query.ToListAsync();
}