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)); }
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>"; } }