Exemplo n.º 1
0
        /// <summary>
        /// Retornar o id do campo Mestre encontrado no objeto (trabalha só com 1 campo key)
        /// </summary>
        /// <param name="t">instância da classe, exemplo: pessoa</param>
        /// <returns>retorna um long com código do id</returns>
        public static long GetKeyId <T>(T t)
        {
            // pega lista de propriedades
            List <PropertyInfo> propriedades = Auxiliar.GetListOfProperties(t);

            // percorre estas destas propriedades e verifica se tem o atributo [Key]
            foreach (PropertyInfo propriedade in propriedades)
            {
                // pegamos atributos que são KeyAttribute
                var atributos = from attr in propriedade.GetCustomAttributes(true)
                                where attr is KeyAttribute
                                select attr;

                // não tem KeyAttribute? pega a próxima propriedade
                if (atributos != null && atributos.Count() > 0)
                {
                    // pega o valor da propriedade
                    object valor = propriedade.GetValue(t, null);
                    if (valor.GetType() == typeof(int))
                    {
                        return((int)valor);
                    }
                }
            }
            throw new Exception("Não encontrada propriedade KeyAttribute de " + t.ToString());
        }
Exemplo n.º 2
0
        /// <summary>
        /// A classe Validator é usada para descobrir se alguma propriedade obrigatória não foi preenchido
        /// </summary>
        /// <param name="t">instância da classe, exemplo: pessoa</param>
        /// <param name="mensagem">parametro de saída - mensagem para ser exibida em caso de campo obrigatório não preenchido</param>
        /// <returns>retorna true se todos os campos required estão preenchidos</returns>
        public static bool IsValid <T>(T t, out string mensagem, out string nome)
        {
            // resposta padrão
            mensagem = string.Empty;
            nome     = string.Empty;

            // reflection que pega os membros de um tipo
            List <PropertyInfo> propriedades = Auxiliar.GetListOfProperties(t);

            // vamos percorrer todas as propriedades
            foreach (PropertyInfo propriedade in propriedades)
            {
                // pegamos os "CustomAtributes" da propriedade
                object[] attributes = propriedades.First().GetCustomAttributes(true);

                // pegamos apenas o atributo RequiredAttribute
                var atributo = from attr in attributes
                               where attr is RequiredAttribute
                               select attr;

                // não tem required? ignora a propriedade
                if (atributo == null)
                {
                    continue;
                }

                // se tem required, vamos buscar informações da coluna
                atributo = from attr in attributes
                           where attr is ColumnAttribute
                           select attr;

                // tem?
                if (atributo != null && atributo.Count() > 0)
                {
                    // pega atributo
                    ColumnAttribute ca = (atributo.First() as ColumnAttribute);
                    if (propriedade.GetValue(t, null) == null)
                    {
                        // verifica se tem atributo de Display (nome informativo)
                        var display = from attr in attributes
                                      where attr is DisplayAttribute
                                      select attr;

                        mensagem = "O preenchimento de " + (display == null ? ca.Name : (display.First() as DisplayAttribute).Name) + " é obrigatório";
                        nome     = propriedade.Name;
                        return(false);
                    }
                }
            }
            return(true);
        }
Exemplo n.º 3
0
        /// <summary>
        /// método que recebe uma instância de uma instância de classe e um tipo
        /// pega os membros desse tipo e lê atributos custom
        /// para retornar o nome do campo (retorna num list de campo)
        /// e também busca na instância da classe (primeiro parametro) o valor
        /// </summary>
        /// <param name="t">instância da classe, exemplo: pessoa</param>
        /// <returns>retorna um list de Campo que contém o nome do campo e valor a ser gravado na base</returns>
        public static List <Campo> GetCampos <T>(T t)
        {
            // cria o retorno vazio
            List <Campo> retorno = new List <Campo>();

            // pega lista de propriedades
            List <PropertyInfo> propriedades = Auxiliar.GetListOfProperties(t);

            try
            {
                // percorre estas destas propriedades
                foreach (PropertyInfo propriedade in propriedades)
                {
                    // pegamos atributos desta propriedade
                    object[] atributos = propriedade.GetCustomAttributes(true);

                    // não tem atributos, pula
                    if (atributos == null || atributos.Count() == 0)
                    {
                        continue;
                    }

                    Campo campo = new Campo();

                    // percorre os atributos customizados (neste exemplo só tem 1: CampoAttribute)
                    foreach (object atributo in atributos)
                    {
                        // esse SetProperties volta true se obter o atributo ColumnAttribute, nos demais false
                        if (Montador.SetProperties(atributo, campo))
                        {
                            // já percorre as propriedades do objeto e procura uma propriedade com mesmo nome do member.Nome
                            // achou? então já temos o valor deste campo (usado no insert, update)
                            campo.Valor = propriedade.GetValue(t, null);
                            // já aproveita e preenche o tipo para uso nos "where" de selects"
                            campo.Tipo = propriedade.PropertyType;
                        }
                    }

                    // se tem valor adiciona a lista
                    if (!string.IsNullOrEmpty(campo.Nome))
                    {
                        retorno.Add(campo);
                    }
                }
            }
            catch (Exception e)
            {
            }

            return(retorno);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Retornar o nome do campo FK
        /// </summary>
        /// <param name="t">instância da classe, exemplo: pessoa</param>
        /// <returns>retorna um string com nome do campo FK</returns>
        public static string GetFieldFK <T>(T t)
        {
            // pega lista de propriedades
            List <PropertyInfo> propriedades = Auxiliar.GetListOfProperties(t);

            // percorre estas destas propriedades e verifica se tem o atributo [Key]
            foreach (PropertyInfo propriedade in propriedades)
            {
                // pegamos atributos que são FK
                var atributos = from attr in propriedade.GetCustomAttributes(true)
                                where attr is ForeignKeyAttribute
                                select attr;

                // não tem KeyAttribute? pega a próxima propriedade
                if (atributos != null && atributos.Count() > 0)
                {
                    return((atributos.First() as ForeignKeyAttribute).Name);
                }
            }
            return(string.Empty);
        }