public async override Task PopulateIndexAsync(CancellationToken cancellationToken)
        {
            var indexClient = GetIndexClient();
            IEnumerable <StandardModel> standards;

            using (var context = _contextFactory.GetLarsContext())
            {
                var standardSectorCodes = await _standardSectorCodeService.GetStandardSectorCodeDescriptionsAsync(context);

                var commonComponents = await _commonComponentService.GetStandardCommonComponents(context);

                var relatedLearningAims = await _relatedLearningAimsService.GetStandardRelatedLearningAims(context);

                var commonComponentLookups = await _commonComponentLookupService.GetCommonComponentLookupsAsync(context);

                var componentTypes = await _componentTypeService.GetComponentTypesAsync(context);

                standards = await context.LarsStandards
                            .Select(st => new StandardModel
                {
                    StandardCode            = st.StandardCode.ToString(),
                    StandardName            = st.StandardName,
                    StandardSectorCode      = st.StandardSectorCode,
                    StandardSectorCodeDesc2 = standardSectorCodes[st.StandardSectorCode],
                    Version                    = st.Version,
                    NotionalEndLevel           = st.NotionalEndLevel,
                    EffectiveFrom              = st.EffectiveFrom,
                    LastDateStarts             = st.LastDateStarts,
                    EffectiveTo                = st.EffectiveTo,
                    SectorSubjectAreaTier1     = st.SectorSubjectAreaTier1.ToString(),
                    SectorSubjectAreaTier1Desc = st.SectorSubjectAreaTier1Navigation.SectorSubjectAreaTier1Desc,
                    SectorSubjectAreaTier2     = st.SectorSubjectAreaTier2.ToString(),
                    SectorSubjectAreaTier2Desc = st.SectorSubjectAreaTier2Navigation.SectorSubjectAreaTier2Desc,
                    IntegratedDegreeStandard   = st.IntegratedDegreeStandard,
                    OtherBodyApprovalRequired  = st.OtherBodyApprovalRequired,
                    StandardFundingModels      = st.LarsStandardFundings
                                                 .Select(sf => new StandardFundingModel
                    {
                        FundingCategoryDescription = sf.FundingCategoryNavigation.FundingCategoryDesc2,
                        BandNumber             = sf.BandNumber,
                        EffectiveFrom          = sf.EffectiveFrom,
                        EffectiveTo            = sf.EffectiveTo,
                        CoreGovContributionCap = sf.CoreGovContributionCap.ToString(),
                        Incentive1618          = sf._1618incentive.ToString(),
                        SmallBusinessIncentive = sf.SmallBusinessIncentive.ToString(),
                        AchievementIncentive   = sf.AchievementIncentive.ToString()
                    }).ToList(),
                    StandardApprenticeshipFundingModels = st.LarsApprenticeshipStdFundings
                                                          .Select(saf => new StandardApprenticeshipFundingModel
                    {
                        FundingCategoryDescription = saf.FundingCategoryNavigation.FundingCategoryDesc2,
                        BandNumber    = saf.BandNumber,
                        EffectiveFrom = saf.EffectiveFrom,
                        EffectiveTo   = saf.EffectiveTo,
                        ProviderAdditionalPayment1618 = saf._1618providerAdditionalPayment.ToString(),
                        EmployerAdditionalPayment1618 = saf._1618employerAdditionalPayment.ToString(),
                        FrameworkUplift1618           = saf._1618frameworkUplift.ToString(),
                        CareLeaverAdditionalPayment   = saf.CareLeaverAdditionalPayment.ToString(),
                        Duration                = saf.Duration.ToString(),
                        MaxEmployerLevyCap      = saf.MaxEmployerLevyCap.ToString(),
                        FundableWithoutEmployer = saf.FundableWithoutEmployer
                    }).ToList()
                }).ToListAsync(cancellationToken);

                foreach (var standard in standards)
                {
                    standard.CommonComponents = commonComponents[standard.StandardCode].ToList();
                    standard.CommonComponents.ForEach(c => c.Description = commonComponentLookups.GetValueOrDefault(c.CommonComponent)?.Description);

                    standard.LearningAims = relatedLearningAims[standard.StandardCode].ToList();
                    standard.LearningAims.ForEach(l => l.ComponentTypeDesc = componentTypes.GetValueOrDefault(l.ComponentType.Value));
                }
            }

            var indexActions = standards.Select(IndexAction.Upload);

            var batch = IndexBatch.New(indexActions);

            if (batch.Actions.Any())
            {
                indexClient.Documents.Index(batch);
            }
        }