Включить и затем включить производительность - PullRequest
0 голосов
/ 04 марта 2019

У меня есть запрос 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();
}
...