Пример #1
0
        public List <string> ObtenhaConceitosComPortadorVinculados()
        {
            var conceitosComPortador = typeof(TEntidade).GetProperties()
                                       .Where(x => GSUtilitarios.VerifiqueSePropriedadeEhEntidadeRelacionalUmParaMuitos(x));

            var listaRetorno = new List <string>();

            foreach (var conceito in conceitosComPortador)
            {
                Type tipoElementos      = GSUtilitarios.ObtenhaTipoLista(conceito.GetValue(conceito, null) as List <dynamic>);
                Type tipoChaveElementos = GSUtilitarios.EncontrePropriedadeChaveDoTipo(tipoElementos).PropertyType;

                var servicoMapeadorElementosLista = Activator.CreateInstance(null, Namespaces.MAPEADORES_CONCRETOS + ".Mapeador" + tipoElementos.Name).Unwrap() as IDisposable;

                var listaElementos = GSUtilitarios.CrieLista(tipoElementos);

                listaElementos = servicoMapeadorElementosLista.GetType()
                                 .GetMethod("Consulte", new Type[] { tipoElementos, tipoChaveElementos })
                                 .Invoke(servicoMapeadorElementosLista, new object[] { tipoElementos, tipoChaveElementos }) as List <dynamic>;

                servicoMapeadorElementosLista.Dispose();

                if (listaElementos.Count > 0)
                {
                    listaRetorno.Add(tipoElementos.Name);
                }
            }

            return(listaRetorno);
        }
Пример #2
0
        protected TEntidade MonteRetorno(DataTable tabela, int linha)
        {
            var retorno = new TEntidade();

            foreach (var propriedade in retorno.GetType().GetProperties())
            {
                if (GSUtilitarios.VerifiqueSePropriedadeEhEntidadeRelacionalUmParaMuitos(propriedade))
                {
                    Type tipoElementos = GSUtilitarios.ObtenhaTipoListaPropriedade(propriedade);

                    var listaElementos = GSUtilitarios.CrieLista(tipoElementos);

                    var servicoMapeadorLista = Activator.CreateInstance(null, Namespaces.MAPEADORES_CONCRETOS + ".Mapeador" + tipoElementos.Name).Unwrap() as IDisposable;

                    var valorChave = retorno.GetType()
                                     .GetProperty(GSUtilitarios.EncontrePropriedadeChaveDoObjeto(retorno).Name)
                                     .GetValue(retorno, null);

                    listaElementos = servicoMapeadorLista.GetType()
                                     .GetMethod("Consulte", new Type[] { typeof(Type), typeof(int) })
                                     .Invoke(servicoMapeadorLista, new object[] { retorno.GetType(), valorChave }) as List <dynamic>;

                    servicoMapeadorLista.Dispose();
                    propriedade.SetValue(retorno, listaElementos);
                }
                else
                {
                    var dado = tabela.Rows[linha][propriedade.Name.ToUpper()];

                    if (propriedade.PropertyType.Equals(typeof(string)))
                    {
                        propriedade.SetValue(retorno, dado != DBNull.Value ? dado : null);
                    }
                    else if (GSUtilitarios.ChequeSeTipoEhBuiltIn(propriedade.PropertyType) && !GSUtilitarios.VerifiqueSeTipoEhLista(propriedade.PropertyType))
                    {
                        propriedade.SetValue(retorno, propriedade.PropertyType
                                             .GetMethod("Parse", new Type[] { typeof(string) })
                                             .Invoke(null, new object[] { dado != DBNull.Value ? dado.ToString() : null }));
                    }
                    else
                    {
                        if (!GSUtilitarios.VerifiqueSeTipoEhLista(propriedade.PropertyType))
                        {
                            Type    tipoChave = GSUtilitarios.EncontrePropriedadeChaveDoTipo(propriedade.PropertyType).PropertyType;
                            dynamic valor;
                            if (propriedade.PropertyType.Equals(typeof(string)))
                            {
                                valor = dado != DBNull.Value ? dado : null;
                            }
                            else
                            {
                                if (dado == DBNull.Value)
                                {
                                    valor = null;
                                    continue;
                                }

                                valor = tipoChave.GetMethod("Parse", new Type[] { typeof(string) })
                                        .Invoke(null, new object[] { dado.ToString() });

                                var servicoMapeadorPropriedadeComplexa = Activator.CreateInstance(null, Namespaces.MAPEADORES_CONCRETOS + ".Mapeador" + propriedade.Name).Unwrap() as IDisposable;

                                valor = servicoMapeadorPropriedadeComplexa.GetType()
                                        .GetMethod("Consulte", new Type[] { tipoChave })
                                        .Invoke(servicoMapeadorPropriedadeComplexa, new object[] { valor });

                                servicoMapeadorPropriedadeComplexa.Dispose();
                            }

                            propriedade.SetValue(retorno, valor);
                        }
                    }
                }
            }

            return(retorno);
        }