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

Включая длительное выполнение, я пытался разделить на куски, но это все еще занимает много времени с большими записями.

      var logbookEntriesFromDbQuery = ctx.LogbookEntries
            .AsNoTracking()
            .Include(le => le.PatientDetail)
            .Include(le => le.AlternateSupervisor)
            .Include(le => le.Hospital)
            .Include(le => le.Logbook.LogbookType.Specialty)
            .Include(le => le.Logbook.LogbookType.Fields)
            .Include(le => le.LogbookEntryProcedures.Select(lep => lep.Procedure.ProcedureLogbookTypes.Select(plt => plt.Categories)))
            .Include(le => le.LogbookEntryProcedures.Select(lep =>
                lep.LogbookEntryProcedureFields.Select(lepf => lepf.ProcedureField).Select(pf => pf.ProcedureProcedureFields)))
            .Include(le => le.LogbookEntryProcedures.Select(lep =>
                lep.LogbookEntryProcedureFields.Select(lepf => lepf.ProcedureField)
                    .Select(pf => pf.ProcedureLogbookTypeProcedureFields)))
            .Include(le => le.LogbookEntryDiagnoses.Select(led => led.Diagnosis.DiagnosisLogbookTypes))
            .Include(le => le.LogbookEntryDiagnoses.Select(led =>
                led.LogbookEntryDiagnosisProcedureFields.Select(ledpf => ledpf.ProcedureField)
                    .Select(pf => pf.DiagnosisProcedureFields)))
            .Include(le => le.LogbookEntryDiagnoses.Select(led =>
                led.LogbookEntryDiagnosisProcedureFields.Select(ledpf => ledpf.ProcedureField)
                    .Select(pf => pf.DiagnosisLogbookTypeProcedureFields)))
            .Include(le => le.LogbookEntryProcedures.Select(lep => lep.LogbookEntryProcedureComplications))
            .Include(le => le.LogbookEntryStatus)
            .Include(le => le.LogbookEntryComments)
            .Where(le => le.LogbookId == logbookId)
            .Where(le => le.LogbookEntryDate > thirtyDaysAgo);

Ответы [ 2 ]

1 голос
/ 22 мая 2019

это потому, что наличие нескольких включений приводит к созданию в запросе нескольких JOINS, а объединения обычно занимают очень много времени.Если вам действительно нужно загрузить всю эту информацию (например, чтобы показать ее в таблице), хорошим вариантом будет создание View в вашей БД, если вам не нужно показывать всю информацию сразу, вы можете извлечьВключает и получает каждое поле отдельно только тогда, когда вам нужно его использовать, надеюсь, это поможет вам

0 голосов
/ 22 мая 2019

Я пробовал ниже, но все еще слишком долго.

        var logbookEntriesFromDb = await ctx.LogbookEntries
            .Include(le => le.PatientDetail)
            .Include(le => le.AlternateSupervisor)
            .Where(le => le.LogbookId == logbookId)
            .Where(le => le.LogbookEntryDate > thirtyDaysAgo)
            .ToListAsync();

        logbookEntriesFromDb = await ctx.LogbookEntries
         .Include(le => le.Hospital)
         .Include(le => le.Logbook.LogbookType.Specialty)
         .Where(le => le.LogbookId == logbookId)
         .Where(le => le.LogbookEntryDate > thirtyDaysAgo)
         .ToListAsync();

        logbookEntriesFromDb = await ctx.LogbookEntries
         .Include(le => le.Logbook.LogbookType.Fields)
         .Include(le => le.LogbookEntryProcedures.Select(lep => lep.Procedure.ProcedureLogbookTypes.Select(plt => plt.Categories)))
         .Where(le => le.LogbookId == logbookId)
         .Where(le => le.LogbookEntryDate > thirtyDaysAgo)
         .ToListAsync();

        logbookEntriesFromDb = await ctx.LogbookEntries
         .Include(le => le.LogbookEntryProcedures.Select(lep =>
             lep.LogbookEntryProcedureFields.Select(lepf => lepf.ProcedureField).Select(pf => pf.ProcedureProcedureFields)))
         .Include(le => le.LogbookEntryProcedures.Select(lep =>
             lep.LogbookEntryProcedureFields.Select(lepf => lepf.ProcedureField)
                 .Select(pf => pf.ProcedureLogbookTypeProcedureFields)))
         .Where(le => le.LogbookId == logbookId)
         .Where(le => le.LogbookEntryDate > thirtyDaysAgo)
         .ToListAsync();

        logbookEntriesFromDb = await ctx.LogbookEntries
          .Include(le => le.LogbookEntryDiagnoses.Select(led => led.Diagnosis.DiagnosisLogbookTypes))
          .Include(le => le.LogbookEntryDiagnoses.Select(led =>
              led.LogbookEntryDiagnosisProcedureFields.Select(ledpf => ledpf.ProcedureField)
                  .Select(pf => pf.DiagnosisProcedureFields)))
          .Where(le => le.LogbookId == logbookId)
          .Where(le => le.LogbookEntryDate > thirtyDaysAgo)
          .ToListAsync();

        logbookEntriesFromDb = await ctx.LogbookEntries
          .Include(le => le.LogbookEntryDiagnoses.Select(led =>
              led.LogbookEntryDiagnosisProcedureFields.Select(ledpf => ledpf.ProcedureField)
                  .Select(pf => pf.DiagnosisLogbookTypeProcedureFields)))
          .Include(le => le.LogbookEntryProcedures.Select(lep => 
        lep.LogbookEntryProcedureComplications))
          .Where(le => le.LogbookId == logbookId)
          .Where(le => le.LogbookEntryDate > thirtyDaysAgo)
          .ToListAsync();

        logbookEntriesFromDb = await ctx.LogbookEntries
            .Include(le => le.LogbookEntryStatus)
            .Include(le => le.LogbookEntryComments)
            .Where(le => le.LogbookId == logbookId)
            .Where(le => le.LogbookEntryDate > thirtyDaysAgo)
            .ToListAsync();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...