Beispiel #1
0
        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);
        }
Beispiel #3
0
 public ComparacaoBasesElementoesController(DBMigrationCompareSimilarDBsContext context)
 {
     _context = context;
 }
Beispiel #4
0
 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;
 }