public void ProcessScenarioCampaignMetrics(Guid runId, Guid scenarioId, IEnumerable <Recommendation> scenarioRecommendations) { try { var scenarioCampaignMetrics = new ScenarioCampaignMetric { Id = scenarioId, Metrics = GenerateCampaignKPIs(runId, scenarioId, scenarioRecommendations) }; _auditEventRepository.Insert(AuditEventFactory.CreateAuditEventForInformationMessage(0, 0, $"Start insert of scenario campaign metrics. ScenarioId: {scenarioId} Count: {scenarioCampaignMetrics.Metrics.Count}")); using (var innerScope = _repositoryFactory.BeginRepositoryScope()) { var scenarioCampaignMetricRepository = innerScope.CreateRepository <IScenarioCampaignMetricRepository>(); scenarioCampaignMetricRepository.AddOrUpdate(scenarioCampaignMetrics); scenarioCampaignMetricRepository.SaveChanges(); } _auditEventRepository.Insert(AuditEventFactory.CreateAuditEventForInformationMessage(0, 0, $"End insert of scenario campaign metrics. ScenarioId: {scenarioId} Count: {scenarioCampaignMetrics.Metrics.Count}")); } catch (Exception e) { _auditEventRepository.Insert(AuditEventFactory.CreateAuditEventForException(0, 0, $"Error while processing scenario campaign metrics. ScenarioId: {scenarioId}", e)); } }
public void AddOrUpdate(ScenarioCampaignMetric scenarioCampaignMetrics) { List <ScenarioCampaignMetricEntity> externalEntities = _mapper.Map <List <ScenarioCampaignMetricEntity> >(scenarioCampaignMetrics); List <ScenarioCampaignMetricEntity> entities = _dbContext.Query <ScenarioCampaignMetricEntity>() .Where(e => e.ScenarioId == scenarioCampaignMetrics.Id) .ToList(); if (!entities.Any()) { _dbContext.BulkInsertEngine.BulkInsert(externalEntities, new BulkInsertOptions() { BatchSize = 600000 }); } else { var addedEntities = externalEntities.Where(x => !entities.Contains(x)).ToArray(); var deletedEntities = entities.Where(x => !externalEntities.Contains(x)).ToArray(); _dbContext.RemoveRange(deletedEntities); _dbContext.AddRange(addedEntities); } }