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());
        }
Example #2
0
        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());
        }
Example #7
0
        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();
        }
Example #9
0
        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])))");
        }