public static string CriarScriptAutoIncremento(Dicionario dicionario) { var chave = dicionario.Itens.FirstOrDefault(i => i.OpcaoGeracao == Incremento.Calculado); if (chave == null) { return(null); } var sql = new StringBuilder(); sql.Append("select isnull((select max(["); sql.Append(chave.Nome); sql.Append(string.Concat("])from[", dicionario.Nome, "]")); if (dicionario.QuantidadeCamposNaChave > 1) { sql.Append("where"); foreach (var campo in dicionario.ConsultarCamposChave()) { if ((campo.Chave) && (campo.OpcaoGeracao == Incremento.Nenhum)) { sql.Append(string.Concat("([", campo.Nome, "]=@p", campo.Id, ")and")); } } sql.Length -= 3; } sql.Append("),0)+1"); return(sql.ToString()); }
public void SeDefinirParametrosParaCamposDaChaveQueNaoSaoAutoIncrementoApenasCamposChaveQueNaoSaoAutoIncrementoDevemSerDefinidos() { var comando = new SqlCommand(); var dicionario = new Dicionario(typeof(ObjetoComChaveDupla)); CommandBuilder.DefinirParametrosParaCamposDaChaveQueNaoSaoAutoIncremento(dicionario, comando); comando.Parameters.Count .Should() .Be(dicionario.QuantidadeCamposNaChave - 1); foreach (var itemDicionario in dicionario.ConsultarCamposChave()) { if (!itemDicionario.Chave || itemDicionario.OpcaoGeracao != Incremento.Nenhum) { continue; } var parametro = comando.Parameters["@p" + itemDicionario.Id.ToString()]; parametro .Should() .NotBeNull(); parametro.DbType .Should() .Be(itemDicionario.TipoBanco); } }
public static string CriarScriptUpdate(Dicionario dicionario) { if (dicionario.QuantidadeCamposNaChave == 0) { throw new ChavePrimariaInvalidaException(); } var sql = new StringBuilder(); var temCampos = false; sql.Append("update["); sql.Append(dicionario.Nome); sql.Append("]set"); foreach (var campo in dicionario.Itens) { if (campo.Chave) { continue; } sql.Append(string.Concat("[", campo.Nome, "]=@p", campo.Id, ",")); temCampos = true; } if (!temCampos) { throw new TabelaPossuiApenasCamposChavesException(); } sql.Length -= 1; sql.Append(" where"); foreach (var campo in dicionario.ConsultarCamposChave()) { sql.Append(string.Concat("([", campo.Nome, "]=@p", campo.Id, ")and")); } sql.Length -= 3; return(sql.ToString()); }
private static void DefinirChavePrimaria(Dicionario dicionario, DataTable tabela) { var campos = new List <DataColumn>(); foreach (var campo in dicionario.ConsultarCamposChave()) { campos.Add(tabela.Columns[campo.Nome]); } tabela.PrimaryKey = campos.ToArray(); }
private static void AcrescentarCamposChave(Dicionario dicionario, StringBuilder sql) { foreach (var campo in dicionario.ConsultarCamposChave()) { sql.Append("(["); sql.Append(campo.Nome); sql.Append("]=@p"); sql.Append(campo.Id); sql.Append(")and"); } sql.Length -= 3; }
public static string CriarScriptDelete(Dicionario dicionario) { if (dicionario.QuantidadeCamposNaChave == 0) { throw new ChavePrimariaInvalidaException(); } var sql = new StringBuilder(); sql.Append("delete["); sql.Append(dicionario.Nome); sql.Append("]where"); foreach (var campo in dicionario.ConsultarCamposChave()) { sql.Append(string.Concat("([", campo.Nome, "]=@p", campo.Id, ")and")); } sql.Length -= 3; return(sql.ToString()); }
private IList <object> CarregarRelacionamentoVinculado(TiposRelacionamento tipo, Configurador <TObjeto> configurador, PropertyInfo propriedade) { var item = _dicionario.ConsultarPorPropriedade(propriedade.Name); configurador.Preparar(); var scriptPadrao = configurador.ConsultarScript(); if (item.Ligacao == null) { throw new NaoFoiPossivelEncontrarALigacaoEntreOsCamposException(); } var scriptPersonalizado = (tipo == TiposRelacionamento.Ascendente) ? _relacionamentoBuilder.CriarScriptConsultaRelacionamentoAscendente(item.Ligacao, scriptPadrao) : _relacionamentoBuilder.CriarScriptConsultaRelacionamentoDescendente(item.Ligacao, scriptPadrao, _dicionario.ConsultarCamposChave()); configurador.PersonalizarScript(scriptPersonalizado); IDataReader reader; try { reader = _comando.ConsultarRegistro(configurador); } catch (Exception ex) { throw new NaoFoiPossivelConsultarRelacionamentoVinculadoDevidoAoSeguinteErroException(_dicionario.AliasOuNome, tipo.ToString(), item.Ligacao.Dicionario.AliasOuNome, ex.Message); } var tipoModel = (tipo == TiposRelacionamento.Ascendente) ? propriedade.PropertyType : propriedade.PropertyType.GetGenericArguments()[0]; try { return(Conversor.ConverterDataReaderParaObjeto(tipoModel, reader).Cast <object>().ToList()); } finally { reader.Close(); } }
public void SeConsultarOsCamposChavesMapeadosDeveRetornarOsCamposEsperados() { var dicionarioDupla = new Dicionario(typeof(ObjetoMapeadoComChaveDupla)); dicionarioDupla.QuantidadeCamposNaChave .Should().Be(2); var campos = dicionarioDupla.ConsultarCamposChave().GetEnumerator(); campos.MoveNext().Should().BeTrue(); campos.Current.Should().NotBeNull(); campos.Current.Alias.Should().Be("MapeadoComChaveBase"); campos.Current.Nome.Should().Be("ChaveBase"); campos.MoveNext().Should().BeTrue(); campos.Current.Should().NotBeNull(); campos.Current.Alias.Should().Be("MapeadoComChaveAutoIncremento"); campos.Current.Nome.Should().Be("ChaveAutoIncremento"); campos.MoveNext().Should().BeFalse(); }
public void SeDefinirParametrosParaTodosOsCamposDaChaveApenasCamposChaveDevemSerDefinidos() { var comando = new SqlCommand(); var dicionario = new Dicionario(typeof(ObjetoDeTestes)); CommandBuilder.DefinirParametrosParaTodosOsCamposDaChave(dicionario, comando); comando.Parameters.Count .Should() .Be(dicionario.QuantidadeCamposNaChave); foreach (var itemDicionario in dicionario.ConsultarCamposChave()) { var parametro = comando.Parameters["@p" + itemDicionario.Id.ToString()]; parametro .Should() .NotBeNull(); parametro.DbType .Should() .Be(itemDicionario.TipoBanco); } }
public void SeCriarScriptConsultaRelacionamentoDescendenteDeveGerarUmScriptSqlCorretamente() { var queryBuilder = new QueryBuilder(); var dicionarioPai = new Dicionario(typeof(ObjetoDeTestes)); queryBuilder.DefinirTabela(dicionarioPai.Nome); queryBuilder.AdicionarCondicao("Codigo", (int)Operadores.Igual, 1); var scriptConsultaDoPai = queryBuilder.GerarScript(dicionarioPai); var dicionarioFilho = new Dicionario(typeof(FilhoDoObjetoDeTestes)); var chaveEstrangeira = DataAnnotationHelper.ConsultarForeignKey(dicionarioFilho.ConsultarPorCampo("Pai").Propriedade); var relacionamentoBuilder = new RelacionamentoBuilder(); var relacionamento = new Relacionamento(TiposRelacionamento.Descendente, dicionarioFilho, chaveEstrangeira); relacionamentoBuilder.CriarScriptConsultaRelacionamentoDescendente(relacionamento, scriptConsultaDoPai, dicionarioPai.ConsultarCamposChave()) .Should() .Be("with[d]as(" + "select[Codigo],[CodigoNulo],[Nome],[Duplo],[DuploNulo],[Decimal]," + "[DecimalNulo],[Logico],[DataHora],[DataHoraNulo] " + "from[ObjetoVirtual]" + "where([Codigo]=@_p0) " + ")" + "select[CodigoFilho],[NomeFilho],[CodigoPai]" + "from[ObjetoVirtualFilho][t]" + "where(exists(" + "select top 1 1 " + "from[d]" + "where(t.[CodigoPai]=d.[Codigo])))"); }