private void ValidarItensMistoDoDicionarioNaoMapeados(Dicionario dicionario)
        {
            dicionario.ConsultarPorCampo("EstadoEntidade").Should().BeNull();
            dicionario.ConsultarPorPropriedade("EstadoEntidade").Should().BeNull();

            dicionario.ConsultarPorCampo("AliasFilhos").Should().NotBeNull();
            dicionario.ConsultarPorPropriedade("AliasFilhos").Should().NotBeNull();
        }
        private void ValidarItensDoDicionarioComValidadores(Dicionario dicionario)
        {
            var campoCodigo = dicionario.ConsultarPorCampo("Codigo");

            campoCodigo.Should().NotBeNull();
            campoCodigo.Validacoes.Should().BeNull();

            var campoNome = dicionario.ConsultarPorCampo("Nome");

            campoNome.Should().NotBeNull();
            campoNome.Validacoes.Should().NotBeNull();
            campoNome.Validacoes.Count.Should().Be(2);
        }
        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])))");
        }
        public void SeCriarObjetoComChaveComputadaDeveRetornarCampoComputado()
        {
            var dicionario = new Dicionario(typeof(ObjetoComChaveComputada));

            dicionario.ConsultarPorCampo("Codigo").OpcaoGeracao
            .Should().Be(Incremento.Calculado);
        }
        public void SeQuestionarPelaPropriedadeRelacinoadaDeUmObjetoQueNaoPossuiUmaDeterminadaChaveDeveRetornarFalso()
        {
            var filho            = new FilhoDoObjetoDeTestes();
            var dicionario       = new Dicionario(typeof(FilhoDoObjetoDeTestes));
            var chaveEstrangeira = DataAnnotationHelper.ConsultarForeignKey(dicionario.ConsultarPorCampo("Pai").Propriedade);
            var relacionamento   = new Relacionamento(TiposRelacionamento.Ascendente, dicionario, chaveEstrangeira);

            relacionamento.PossuiChaveAscendente(new object[] { 123 }, filho)
            .Should().BeFalse();
        }
        public void AplicarChaveAscendente(object[] chaveAscendente, object objeto)
        {
            var n = 0;

            foreach (var campoEstrangeiro in ChaveEstrangeira)
            {
                var campo = Dicionario.ConsultarPorCampo(campoEstrangeiro);
                campo.Propriedade.SetValue(objeto, chaveAscendente[n], null);
                n++;
            }
        }
        public void SeDefinirUmaChaveAscendenteDeUmCampoRelacionadoDevePreencherObjetoCorretamente()
        {
            var filho            = new FilhoDoObjetoDeTestes();
            var dicionario       = new Dicionario(typeof(FilhoDoObjetoDeTestes));
            var chaveEstrangeira = DataAnnotationHelper.ConsultarForeignKey(dicionario.ConsultarPorCampo("Pai").Propriedade);
            var relacionamento   = new Relacionamento(TiposRelacionamento.Ascendente, dicionario, chaveEstrangeira);

            relacionamento.AplicarChaveAscendente(new object[] { 123 }, filho);

            filho.CodigoPai
            .Should().Be(123);
        }
        public void SeQuestionarPelaPropriedadeRelacionadaComDeterminadoValorPreenchidoDeveRetornarVerdadeiro()
        {
            var filho = new FilhoDoObjetoDeTestes()
            {
                CodigoPai = 123
            };

            var dicionario       = new Dicionario(typeof(FilhoDoObjetoDeTestes));
            var chaveEstrangeira = DataAnnotationHelper.ConsultarForeignKey(dicionario.ConsultarPorCampo("Pai").Propriedade);
            var relacionamento   = new Relacionamento(TiposRelacionamento.Ascendente, dicionario, chaveEstrangeira);

            relacionamento.PossuiChaveAscendente(new object[] { 123 }, filho)
            .Should().BeTrue();
        }
        public bool PossuiChaveAscendente(object[] chaveAscendente, object objeto)
        {
            var n = 0;

            foreach (var campoEstrangeiro in ChaveEstrangeira)
            {
                var campo = Dicionario.ConsultarPorCampo(campoEstrangeiro);
                var valor = campo.Propriedade.GetValue(objeto, null);
                if (!Equals(chaveAscendente[n], valor))
                {
                    return(false);
                }
                n++;
            }
            return(n > 0);
        }