Usando Reflection para adicionar parâmetros por herança

Muitas vezes nos encontramos em um cenário onde as classes de entidade da nossa aplicação são uma representação fiel do banco de dados seguindo o modelo MVC.

Nessas situações muitas vezes na nossa camada de acesso a dados temos que fazer a passagem de parametros para inserts, updates e deletes um a um.

Utilizando o código a seguir basta criarmos uma classe pai, de onde todas as outras herdam (no caso do exemplo a classe Pessoa), então passando o command e a instancia da nossa classe filha deixamos o reflection fazer todo o trabalho, pegando cada propriedade existente na classe e adicionando um parametro ao nosso command.

Segue o código :

public void MontaParametro(ref DbCommand prCmd,Pessoa prPessoa) 
        {
            // instancia Sql como default
            DbParameter parametro = new SqlParameter();
            string identificador = "";
            //loop do reflection pegando cada propriedade da classe que foi passada e também da classe pai Pessoa
            foreach (PropertyInfo pi in prPessoa.GetType().GetProperties()) 
            {
                //Verificação do tipo de command (no caso do OracleCommand é necessário adicionar a referência ao System.Data.OracleClient
                if (prCmd.GetType() == typeof(SqlCommand))
                {
                    identificador = "@";
                    parametro = new SqlParameter();
                }
                else if (prCmd.GetType() == typeof(OracleCommand))
                {
                    identificador = ":";
                    parametro = new OracleParameter();
                }
                else if (prCmd.GetType() == typeof(OleDbCommand))
                {
                    identificador = "?";
                    parametro = new OleDbParameter();
                } 
                parametro.Value = pi.GetValue(prPessoa,null);
                parametro.ParameterName = identificador + pi.Name;
                prCmd.Parameters.Add(parametro);
            }
        }

// Domingos Carreira De Paola

Arquivos para Download:

artigo.zip

Qual é a sua opinião ou dúvida?