Mapeando objetos com C# e Dapper | Rodrigo R. Ferreira
Mapeando objetos com C# e Dapper
28 de setembro de 2016 28 de setembro de 2016 / rodrigoreisf
Fala galera, o post de hoje é para tratar de um assunto de extrema importância e fonte eterna de perguntas para muitos desenvolvedores(eu incluso!), a escolha e o uso da biblioteca de mapeamento objeto relacional (ORM – Object-Relational Mapping) para seu projeto. Por definição um ORM é a técnica que você utilizará para converter um formato de dados em linguagem orientada a objetos, ou seja, como você vai transformar aquelas tabelas que criou no seu banco de dados favorito em classes/objetos para uso na linguagem que escolheu para sua aplicação. Conhecem o Dapper?!
No mercado existem centenas de opções conhecidas de ORM para os mais diversos bancos de dados e linguagem de programação, sendo os mais conhecidos o Hibernate/NHibernate , Java e .NET respectivamente, e o queridinho da Microsoft, o EntityFramework. A estrela de hoje é o micro-ORM open-source criado e utilizado pelo pessoal do Stackoverflow, o DotNet Dapper.
Abaixo segue meu primeiro contato com o Dapper e como funciona a criação de estruturas de consulta, gravação, atualização e exclusão de dados.
Instalando o Dapper com Nuget
A instalação é simples, acessar o gerenciador do Nuget(Manage Nuget Packages) no seu projeto, procura por Dapper na aba "Online", até o momento que fiz este post a última versão é a 1.50.2 sw 22/07/2016. Feita a instalação, a dll irá aparecer nas referências do projeto e podemos começar.
Tela de gerenciamento de packages do Nuget.
Obs: ao rodar o Dapper instalado via nuget pode se deparar com um erro em "SqlMapper.cs", neste caso recomendo baixar o projeto do github e adicionar manualmente os arquivos .cs direto no projeto de teste e compilar.
Criando um SELECT
Inicialmente vamos fazer um select básico em uma tabela, instanciamos uma conexão com a declaração using que irá gerenciar a abertura e fechamento da mesma, passamos a query em string para o método Query() e imprimimos a quantidade de linhas resultantes. Simples né?
string conString = ConfigurationManager.ConnectionStrings["Conexao"]
Console.WriteLine(" ===== Projeto Dapper =====");
var rows = con.Query("select * from ESTOQUE.Campanha");
Console.WriteLine("Número de campanhas: " + rows.Count());
Criando um SELECT com filtros
var sql = @"select * from ESTOQUE.Campanha where idCampanha = @id";
using (var multi = con.QueryMultiple(sql, new { id = 15042015 }))
var campanha = multi.Read<Campanha>().Single();
Console.WriteLine("Nome da campanha: " + campanha.nmCampanha);
Criando um UPDATE
var comando = @"update ESTOQUE.Campanha Set nmCampanha = @novoNome Where        idCampanha = @idCampanha";
con.Execute(comando, new
novoNome = "CampanhaTeste01",
idCampanha = 15042015
Criando um INSERT
var campanha = new Campanha()
nmCampanha = "Camp01",
dtInicio = DateTime.Now,
dtFim = DateTime.Now.AddMonths(2),
var id = con.Query(
@" insert ESTOQUE.Campanha(nmCampanha, dtInicio, dtFim, tipo)
values (@nmCampanha, @dtInicio, @dtFim, @tipo)
", campanha).First();
Criando um DELETE
var id = con.Execute("delete from ESTOQUE.Campanha where idCampanha = @id", new {    id = 15042030 });
Obviamente que acima não está todo o poder do Dapper, os exemplos acima são bem simples e não exigem muito em termos de performance, mas então a pergunta que fica é se o ORM é eficiente quando se depara com consultas complexa e um volume grande de dados. Veja na tabela seguinte um benchmark feito com relação a outros métodos de consulta:
Método Duração
Fonte: https://github.com/StackExchange/dapper-dot-net
Veja que o Dapper se sai quase tão bem quanto uma consulta feita "na mão", sem intermediários. Se você precisa de algo leve, rápido e fácil de usar, ao invés de usar o Entity Framework como normalmente faria, considere experimentar o Dapper para criar aquela "telinha" que o seu tio pediu.
← OWL 2 – Web Ontology Language
Existe sessão no .NET MVC? →
5 comentários sobre "Mapeando objetos com C# e Dapper"
Pingback: [Dapper] Objetos Complexos – Dicas e tutoriais em .NET
15 de setembro de 2017 às 07:22
Fala Rodrigo, muito bom seu artigo, eu citei em um que eu criei específico para objetos complexos no Dapper.. https://thiagodevnet.wordpress.com/2017/09/13/dapper-objetos-complexos/
Agradeço o comentário e a referência Thiago, seu post sobre Dapper ficou bem claro e objetivo, parabéns. Espero ver mais posts seus em breve. 🙂
pfnienow@hotmail.com
Rodrigo, sou novo na programação, mas gostei muito da sua forma de abordar sobre o uso do Dapper. Estou com um dúvida que deve ser ridícula para você, mas não estou conseguindo encontrar uma resposta/exemplo que me ajude. Tenho uma tabela no SQL de nome TB_Volume, com as colunas Id (int – chave primária), Volume_Inferior (decimal) e Volume_Superior (decimal). Como faço para ler essas informações no SQL e gravar em um array (ou três) utilizando o Dapper, Estou trabalhando com c#. Antecipo agradecimentos.