.NET 8 + Dapper em 4 exemplos: relacionamentos 1:1 e 1:n, monitoramento, performance

Renato Groffe
3 min readApr 23, 2024

Recentemente realizei uma apresentação (16/04) sobre o uso do Dapper como solução de acesso a dados em projetos .NET. Procurando fugir do que comumente é apresentado sobre este Micro-ORM em conteúdos na Internet, separei em um repositório no GitHub 4 exemplos (além de um quinto projeto trazendo uma solução alternativa para cargas de dados):

Para acessar este repositório utilize o link:

https://github.com/renatogroffe/DotNet8-Dapper

Caso achem útil esta solução, peço por favor um ⭐️ no repositório apoiando. Fica também o convite para que vocês me sigam lá no GitHub!

A seguir temos uma descrição breve de cada um desses 5 projetos:

  • one-to-one: API REST demonstrando a implementação de relacionamentos 1:1 (Estado x Região) e que faz uso de uma base de dados do SQLite;
  • one-to-many-miniprofiler: API que implementa relacionamentos 1:n (Região x Estado) via biblioteca Slapper.AutoMapper, utilizando ainda uma base do SQL Server, Entity Framework Core e instrumentação/monitoramento com MiniProfiler;
  • sqlserver-benchmarking: testes comparativos implementados com a biblioteca BenchmarkDotNet, a fim de analisar a performance no acesso a dados de bases SQL Server com Dapper, Dapper.Contrib (extensão que simplifica a implementação de CRUD com Dapper), Entity Framework Core e ADO.NET. Inclui um pipeline do Azure DevOps para execução automatizada desses testes;
  • postgres-benchmarking: projeto que é uma variação da implementação empregando o BenchmarkDotNet em sqlserver-benchmarking, comparando aqui a performance na utilização de PostgreSQL com ADO.NET, Dapper e Entity Framework Core;
  • bulkcopy-linqtodb: Console App criada em .NET 8 e que faz uso de SQL Server, da biblioteca Bogus (geração de dados fake) e do projeto LinqToDB para carga de dados de empresas. O suporte a Bulk Copy do LinqToDB é uma alternativa à inexistência de uma solução oficial para este tipo de implementação com Dapper.

Nos prints a seguir temos um exemplo de uso do MiniProfiler no projeto sqlserver-benchmarking, com as instruções SQL geradas a partir do uso do Dapper:

Clique nesta imagem para visualizar com uma melhor resolução
Clique nesta imagem para visualizar com uma melhor resolução

Quanto à utilização do BenchmarkDotNet, nos print seguintes temos resultados ao executar o pipeline que está em sqlserver-benchmarking e empregando o SQL Server (com ADO.NET, Dapper, Dapper.Contrib e Entity Framework Core):

Clique nesta imagem para visualizar com uma melhor resolução
Clique nesta imagem para visualizar com uma melhor resolução

Já os próximos prints trazem resultados similares com o PostgreSQL:

Clique nesta imagem para visualizar com uma melhor resolução
Clique nesta imagem para visualizar com uma melhor resolução

As variações nestes resultados aconteceram com base no número de registros-filhos gerados em cada bateria de testes (inclusão de Empresas + Contatos). Para entender melhor cada cenário, assim como todo o esforço de implementação, sugiro que você assista à gravação de uma live que realizamos recentemente no Canal .NET (clique neste link para acessar o vídeo no YouTube):

--

--

Renato Groffe

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker