public async Task <IActionResult> Edit(long id, [Bind("Id, NomeGrupo,ConnectionStringLegadas,PrefixoNomeBaseLegadas,RegexNomeTabelasDescartar")] BaseLegadaGrupo baseLegadaGrupoView)
        {
            if (id != baseLegadaGrupoView.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    BaseLegadaGrupo baseLegadaGrupo = _context.BaseLegadaGrupos.Find(id);
                    baseLegadaGrupo.NomeGrupo = baseLegadaGrupoView.NomeGrupo;
                    baseLegadaGrupo.PrefixoNomeBaseLegadas    = baseLegadaGrupoView.PrefixoNomeBaseLegadas;
                    baseLegadaGrupo.RegexNomeTabelasDescartar = baseLegadaGrupoView.RegexNomeTabelasDescartar;
                    baseLegadaGrupo.ConnectionStringLegadas   = baseLegadaGrupoView.ConnectionStringLegadas;
                    _context.Update(baseLegadaGrupo);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!BaseLegadaExists(baseLegadaGrupoView.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(baseLegadaGrupoView));
        }
        public async Task <IActionResult> Create([Bind("NomeGrupo,ConnectionStringLegadas,PrefixoNomeBaseLegadas,RegexNomeTabelasDescartar")] BaseLegadaGrupo baseLegadaGrupo)
        {
            if (ModelState.IsValid)
            {
                _context.Add(baseLegadaGrupo);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(baseLegadaGrupo));
        }
コード例 #3
0
        private void BuscarEAtualizarBasesNaoGerenciadasPorGrupo(BaseLegadaGrupo grupo)
        {
            var    basesGerenciadas = new List <BaseLegada>();
            var    basesEncontradas = new List <BaseLegada>();
            var    basesEncontradasNaoGerenciadas = new List <BaseLegada>();
            string queryConsultarBasesLegadas     = $@"SELECT dt.Name, 
            row_size_mb = CAST(SUM(CASE WHEN type_desc = 'ROWS' THEN size END) * 8. / 1024 AS DECIMAL(8,2)) 
            FROM SYS.DATABASES as dt
            INNER JOIN sys.master_files AS mf ON MF.database_id =  dt.database_id
            WHERE dt.NAME LIKE '{grupo.PrefixoNomeBaseLegadas}%'
            GROUP BY dt.Name, mf.database_id";

            try
            {
                using var connection = new SqlConnection(grupo.ConnectionStringLegadas);
                connection.Open();
                using var command          = new SqlCommand(queryConsultarBasesLegadas, connection);
                using SqlDataReader reader = command.ExecuteReader();
                while (reader.Read())
                {
                    basesEncontradas.Add(new BaseLegada()
                    {
                        Nome = reader.GetString(0), Tamanho = (double)reader.GetDecimal(1), BaseLegadaGrupo = grupo.Id
                    });
                }

                basesGerenciadas = _context.BaseLegada.Where(bl => bl.BaseLegadaGrupo == grupo.Id).ToList();
                basesEncontradasNaoGerenciadas = basesEncontradas.Where(be => !basesGerenciadas.Exists(bg => bg.Nome.Equals(be.Nome))).ToList();

                _context.BaseLegada.AddRange(basesEncontradasNaoGerenciadas.ToArray());
                basesGerenciadas.ForEach(bg =>
                {
                    var baseEncontrada = basesEncontradas.FirstOrDefault(be => be.Nome.Equals(bg.Nome));
                    if (baseEncontrada?.Tamanho > 0)
                    {
                        bg.Tamanho = baseEncontrada.Tamanho;
                    }
                });
                // Cria o dacpac (arquivo de estrutura do schema do BD).
                Parallel.ForEach(basesEncontradas, (bn) =>
                {
                    new DACPACGerador(configuration).GerarArquivoDacPacDeBase(bn.Nome, grupo.ConnectionStringLegadas);
                });
                _context.BaseLegada.UpdateRange(basesGerenciadas.ToArray());
                _context.SaveChanges();
                TempData["MensagemSucesso"] += $"<p>Busca concluída para as bases do grupo {grupo.NomeGrupo}! {basesEncontradasNaoGerenciadas.Count} nova(s) base(s) encontrada(s)!</p>";
            }
            catch (Exception ex)
            {
                TempData["MensagemFalha"] += $"<p>Falha na busca das bases do grupo {grupo.NomeGrupo}! Verifique sua conexão.</p>";
            }
        }