O Dapper já é muito conhecido entre os desenvolvedores .NET, aqui no blog eu já escrevi um artigo explicando o que é o Dapper (Clique aqui) e outro falando como podemos mapear coleções com o Dapper (Clique aqui). Uma outra forma bem bacana de se fazer o mapeamento de coleções é usando a técnica de múltiplos resultados, onde são executadas várias querys ao mesmo tempo e retornado vários objetos, nesse artigo vou mostrar como fazer o uso dessa técnica.
Criando nosso projeto Dapper
Para o exemplo vamos utilizar uma aplicação console .NET core, e um banco de dados Sql Server, para iniciar vamos ao Visual Studio 2019 e criamos um novo projeto:
Depois vamos colocar o nome no nosso projeto e clicar em Create
Após ter criado o projeto precisamos adicionar 2 referências ao projeto, a do System.Data.SqlClient e depois a do Dapper, para isso vamos ao Solution Explorer em Dependencies e vamos clicar com o botão direito e vamos ao Manage Nuget Packes.
Vamos buscar o System.Data.SqlClient e instalar a dependência em nosso projeto.
Depois vamos instalar o Dapper.
Com isso já podemos montar nosso exemplo.
Estrutura básica para fazer as consultas.
Para iniciar vamos configurar a conexão com o banco de dados, vamos até o nosso Program.cs e vamos colocar o seguinte código:
Com isso já podemos passar ao Dapper nossa conexão para efetuar nossas querys.
No nosso exemplo vamos criar duas entidades, uma chamada Cliente e outra Empresa, conforme abaixo:
Cliente.cs
Empresa.cs
Como podemos ver, cada empresa vai ter uma lista de clientes.
Para o exemplo foi adicionado 5 empresas e cadastrado alguns clientes dentro de cada empresa:
Utilizando o múltiplo resultado
Agora vamos utilizar a técnica de múltiplo resultado do Dapper, primeiro vamos criar uma variável recebendo todas as consultas.
Agora vamos utilizar o método QueryMultiple do Dapper, onde ele retorta um objeto do tipo GridReader, que vai ser utilizado para mapear nossos objetos. Para o exemplo foi utilizado um for para iteração das chaves das empresas, abaixo segue o código do QueryMultiple:
Podemos ver que é muito simples de utilizar, basta pegar o retorno do QueryMultiple e após isso utilizar o método Read(), onde é o objeto que vai ser mapeado.
O resultado ao executar a aplicação é esse:
Conclusão
Podemos ver que dessa forma fica mais fácil de mapear uma entidade e suas devidas entidades filhas. Outro ponto é que facilita a leitura do código. O exemplo completo do código você encotra no github.
Código de exemplo: