public When_Import_Is_Called_To_Import_LearningAimReferenceStaging() { var config = new MapperConfiguration(c => c.AddMaps(typeof(LearningAimReferenceStagingMapper).Assembly)); var mapper = new Mapper(config); var logger = Substitute.For <ILogger <FileImportService <LearningAimReferenceStagingFileImportDto, LearningAimReferenceStagingDto, LearningAimReferenceStaging> > >(); _fileReader = Substitute.For <IFileReader <LearningAimReferenceStagingFileImportDto, LearningAimReferenceStagingDto> >(); _dataProcessor = Substitute.For <IDataProcessor <LearningAimReferenceStaging> >(); _repository = Substitute.For <IBulkInsertRepository <LearningAimReferenceStaging> >(); _repository.MergeFromStagingAsync().Returns(2); _stagingFileImportDto = new LearningAimReferenceStagingFileImportDto { FileDataStream = new MemoryStream() }; _fileReaderResults = Build(2); _fileReader.ValidateAndParseFileAsync(_stagingFileImportDto) .Returns(Task.FromResult(_fileReaderResults)); var service = new FileImportService <LearningAimReferenceStagingFileImportDto, LearningAimReferenceStagingDto, LearningAimReferenceStaging>(logger, mapper, _fileReader, _repository, _dataProcessor); _result = service.BulkImportAsync(_stagingFileImportDto).GetAwaiter().GetResult(); }
public async Task <int> BulkImportAsync(TImportDto fileImportDto) { _logger.LogInformation($"Processing {typeof(TImportDto).Name}."); var dataDtos = await _fileReader.ValidateAndParseFileAsync(fileImportDto); if (dataDtos == null || !dataDtos.Any()) { _logger.LogInformation("No Data Imported."); return(0); } var comparer = GetEqualityComparer(); var entities = _mapper.Map <IList <TEntity> >(dataDtos).Distinct(comparer).ToList(); _dataProcessor.PreProcessingHandler(entities); _logger.LogInformation($"Saving {entities.Count} {typeof(TImportDto).Name}."); var numberOfRecordsAffected = 0; if (entities.Count < BatchingThreshold) { await _repository.BulkInsertAsync(entities); numberOfRecordsAffected = await _repository.MergeFromStagingAsync(); } else { for (var i = 0; i < entities.Count; i += BatchSize) { var batch = entities.Skip(i).Take(BatchSize); await _repository.BulkInsertAsync(batch.ToList()); var recordsAffected = await _repository.MergeFromStagingAsync(false); numberOfRecordsAffected += recordsAffected; } } _dataProcessor.PostProcessingHandler(entities); return(numberOfRecordsAffected); }
public async Task <int> SynchronizeProviderReferenceAsync(DateTime lastUpdateDate) { var backgroundProcessHistoryId = await CreateBackgroundProcessHistoryAsync(); var providerReferenceStagings = await GetProvidersForStagingAsync(lastUpdateDate); await _bulkInsertRepository.BulkInsertAsync(providerReferenceStagings); await _bulkInsertRepository.MergeFromStagingAsync(); await UpdateBackgroundProcessHistoryAsync(backgroundProcessHistoryId, providerReferenceStagings.Count); return(providerReferenceStagings.Count); }