private void CompararECriarComparacoes(ComparacaoBases comparacaoBases) { var contexto = new DBMigrationCompareSimilarDBsContext(); DateTime dataInicio = DateTime.Now; BaseLegada baseAlvo = contexto.BaseLegada.Include(bl => bl.BaseLegadaGrupoNavigation).FirstOrDefault(bl => bl.Id == comparacaoBases.BaseAlvo); BaseLegada baseFonte = contexto.BaseLegada.Find(comparacaoBases.BaseFonte); string tempPath = Path.GetTempPath(); string prefixo = $"{tempPath}Compare_{baseFonte.Nome}_{baseAlvo.Nome}"; string xmlOutPutFile = $"{prefixo}_out.xml"; try { contexto.ComparacaoBasesElementos.RemoveRange(contexto.ComparacaoBasesElementos.Where(cbe => cbe.ComparacaoBases == comparacaoBases.Id)); GerarArquivoComparacaoSQL(baseFonte.Nome, baseAlvo.Nome, xmlOutPutFile, baseAlvo.BaseLegadaGrupoNavigation.ConnectionStringLegadas); comparacaoBases = ExtrairInformacoesComparacaoDeXML(xmlOutPutFile, comparacaoBases); // Exclui os elementos da comparação, se existir, para refazer a comparação existente. comparacaoBases.StatusComparacao = StatusComparacao.Concluida; comparacaoBases.DataComparacao = DateTime.Now; } catch (Exception ex) { comparacaoBases.StatusComparacao = StatusComparacao.Falha; comparacaoBases.MensagemFalha = ex.Message; } comparacaoBases.TempoComparacaoEmMinutos = (DateTime.Now - dataInicio).TotalMinutes; lock (lockObject) { contexto.ComparacaoBases.Update(comparacaoBases); _ = contexto.SaveChangesAsync(); } }
public int ExecuteAsync(CancellationToken stoppingToken) { var _context = new DBMigrationCompareSimilarDBsContext(); // Retorna os nomes das bases sem combinações entre elas. // primeira consulta retornará duplicado, com bases em lados diferentes (alvo x fonte, fonte x alvo) var combinacoesInexistentes = (from b1 in _context.BaseLegada from b2 in _context.BaseLegada where b1.Nome != b2.Nome && !_context.ComparacaoBases.Any(cb => (cb.BaseAlvo == b1.Id && cb.BaseFonte == b2.Id) || (cb.BaseAlvo == b2.Id && cb.BaseFonte == b1.Id)) && b1.BaseLegadaGrupo == b2.BaseLegadaGrupo orderby b1.StatusMigracao descending select new Tuple <BaseLegada, BaseLegada>(new BaseLegada() { Id = b1.Id, Nome = b1.Nome }, new BaseLegada() { Id = b2.Id, Nome = b2.Nome })).ToList(); combinacoesInexistentes = LimparCombinacoesDuplicadas(combinacoesInexistentes); var comparacoesCriadas = new List <ComparacaoBases>(); foreach (var cb in combinacoesInexistentes) { if (!stoppingToken.IsCancellationRequested) { var comparacaoBases = new ComparacaoBases(); comparacaoBases.DataComparacao = DateTime.Now; comparacaoBases.StatusComparacao = StatusComparacao.EmAndamento; //A base fonte é o item 1 devido ordenação priorizando pelo status 'concluído' comparacaoBases.BaseFonte = cb.Item1.Id; comparacaoBases.BaseAlvo = cb.Item2.Id; // Primeiro cria a comparação _context.ComparacaoBases.Add(comparacaoBases); _context.SaveChanges(); comparacoesCriadas.Add(comparacaoBases); } } Parallel.ForEach(comparacoesCriadas, new ParallelOptions { MaxDegreeOfParallelism = 1 }, cb => { new ComparadorBases(configuration).Execute(cb); }); return(combinacoesInexistentes.Count); }
public ComparacaoBasesElementoesController(DBMigrationCompareSimilarDBsContext context) { _context = context; }
public ComparacaoBasesController(DBMigrationCompareSimilarDBsContext context, IConfiguration configuration) { context.Database.SetCommandTimeout(6000); _context = context; this.configuration = configuration; }
public BaseLegadaGruposController(DBMigrationCompareSimilarDBsContext context, IConfiguration configuration) { _context = context; this.configuration = configuration; }