public object Save(object entidade) { string stringConsulta = ""; bool pkIdentidade = false; bool novoItem; Type tipo = entidade.GetType(); HydraParameters hydraParametros = new HydraParameters(); PropertyInfo PK = tipo.GetProperties().Where(x => Valida.PrimaryKey(x) != null).FirstOrDefault(); PropertyInfo[] colunas = tipo.GetProperties().Where(x => Valida.Coluna(x) != null).ToArray(); Dictionary <PropriedadePK, object> propriedadesPK = Carrega.InfoPrimaryKey(entidade, tipo, PK, hydraParametros); List <string> NomeColunas = Carrega.Parametros(entidade, tipo, hydraParametros, colunas); SqlConnection sqlConnection = new SqlConnection(); SqlCommand comando = new SqlCommand(); SqlDataReader dadosTabela; if (propriedadesPK != null) { string valorPK = propriedadesPK[PropriedadePK.Valor].ToString(); string nomePK = propriedadesPK[PropriedadePK.Nome].ToString(); pkIdentidade = bool.Parse(propriedadesPK[PropriedadePK.Identidade].ToString()); string consultaObjeto = ""; Manipula.Consulta(out consultaObjeto, tipo, TipoConsulta.Select, 1, nomePK, condicoes: $"WHERE {nomePK} = {valorPK}"); try { sqlConnection = AbrirBanco(); using (comando = new SqlCommand(consultaObjeto, sqlConnection)) { using (dadosTabela = comando.ExecuteReader()) { if (dadosTabela.Read()) { novoItem = false; } else { novoItem = true; } } } } catch (Exception ex) { FecharBanco(sqlConnection); throw ex; } if (novoItem == true) { if (pkIdentidade == true) { stringConsulta = Insert(tipo, NomeColunas, nomePK); } else { stringConsulta = Insert(tipo, NomeColunas, nomePK, false); } } else { if (pkIdentidade == true) { stringConsulta = Update(tipo, NomeColunas, nomePK, valorPK); } else { stringConsulta = Update(tipo, NomeColunas, nomePK, valorPK, false); } } try { using (comando = new SqlCommand(stringConsulta, sqlConnection)) { Popula.Parametros(hydraParametros, comando, pkIdentidade); using (dadosTabela = comando.ExecuteReader()) { Popula.Objeto(dadosTabela, entidade, tipo); } } } catch (Exception ex) { throw ex; } finally { FecharBanco(sqlConnection); } } else { entidade = new object(); } return(entidade); }