C# 
-  Dapper básico (revisitado) via Console
    
    ![]()  | 
    Neste artigo vamos rever os conceitos básicos sobre o Dapper um micro ORM que pode ser usado em aplicações menos complexas. | 
Se você não gosta de ORMs ou se o seu projeto não justifica a utilização de um ORM como o Entity Framework, o Dapper pode vir a calhar para você.

Por que então não dar uma chance ao Dapper conhecendo os seus recursos ?
Eu já falei sobre o Dapper nos seguintes artigos:
Hoje vou mostrar como é fácil usar o Dapper em um projeto Console.
recursos usados:
Criando o projeto no VS 2019 Community
Vamos criar um projeto usando a linguagem C# do tipo Console para .NET Core : Console App(.NET Core)
![]()  | 
	
Podemos chamar o projeto de CShp_Dapper1.
No projeto criado vamos incluir um arquivo de JSON chamado appsettings.json que para facilitar o nosso trabalho será colocado na pasta /bin/debug/netcoreapp2.2 do projeto.
Definindo a fonte de dados
Vamos usar como fonte de dados um banco de dados SQL Server Cadastro.mdf e a tabela Clientes que tem a seguinte estrutura e dados:


A seguir temos o script SQL para gerar a tabela:
| 
		CREATE TABLE [dbo].[Clientes] ( [ClienteId] INT IDENTITY (1, 1) NOT NULL, [Nome] NVARCHAR (80) NOT NULL, [Idade] INT NULL, [Email] NVARCHAR (150) NULL, [Pais] NVARCHAR (20) NULL, CONSTRAINT [PK_Clientes] PRIMARY KEY CLUSTERED ([ClienteId] ASC) );  | 
	
A string de conexão deste banco de dados já pode ser incluida no arquivo appsettings.json conforme mostrado a seguir:
| 
		{ "ConnectionStrings": { "DefaultConnection": "Data Source=MACORATTI;Initial Catalog=Cadastro;Integrated Security=True" } }  | 
	
Vamos criar uma pasta Models no projeto e nesta classe definir a classe Cliente com o código abaixo:
| 
		        public class Cliente { public int ClienteI { get; set; } public string Nome { get; set; } public int Idade { get; set; } public string Email { get; set; } public string Pais { get; set; } }  | 
	
Essa classe será o nosso DTO.
Instalando o Dapper e os pacotes do Configuration
No menu Tools acione o gerenciador de pacotes Nuget para a Solution e instale o pacote Dapper no projeto:

Instale também os seguines pacotes :
Agora que já temos tudo pronto vamos realizar as operações CRUD usando o Dapper.
Definindo o código no arquivo Program
Abra o arquivo Program e defina os namespaces que iremos usar:
| 
		using 
		CShp_Dapper1.Models; using Dapper; using Microsoft.Extensions.Configuration; using System; using System.Data.SqlClient; using System.IO;  | 
	
A seguir vamos definir uma instância de IConfiguration:
public static IConfigurationRoot Configuration { get; set; }
No método Main() inclua o código a seguir que lê a string de conexão e monta o menu:
| 
		                static void Main(string[] args) { 
		                        var builder = new ConfigurationBuilder() Configuration = builder.Build(); string _con = Configuration["ConnectionStrings:DefaultConnection"];                         Console.WriteLine("\tc - Consultar");  | 
	
A seguir vamos definir cada um dos métodos para realizar as operações de consulta, inclusão, atualização e exclusão dos dados.
1- Consultar Dados
| 
		     
		
		          static async void Consultar(string conexao) { using (var db = new SqlConnection(conexao)) { await db.OpenAsync(); var query = "Select Top 10 ClienteId,Nome,Idade,Pais From Clientes"; var clientes = await db.QueryAsync<Cliente>(query); foreach (var cliente in clientes) { Console.WriteLine(new string('*', 20)); Console.WriteLine("\nID: " + cliente.ClienteId.ToString()); Console.WriteLine("Nome : " + cliente.Nome); Console.WriteLine("Idade: " + cliente.Idade.ToString()); Console.WriteLine("Pais : " + cliente.Pais + "\n"); Console.WriteLine(new string('*', 20)); } Console.ReadLine(); } }  | 
	
2- Incluir Dados
| 
		     
		static async void Incluir(string conexao) { using (var db = new SqlConnection(conexao)) { Cliente model = new Cliente(); model.Nome = "teste"; model.Email = "email@teste.com"; model.Idade = 99; model.Pais = "Terra"; try { await db.OpenAsync(); var query = @"Insert Into Clientes(Nome,Idade,Email,Pais) Values(@nome,@idade,@email,@pais)"; await db.ExecuteAsync(query, model); Console.WriteLine($"Cliente {model.Nome} incluido com sucesso"); } catch (Exception ex) { Console.WriteLine(ex.Message); } } }  | 
	
3- Atualizar Dados
| 
		  
		static async void Atualizar(string conexao) { using (var db = new SqlConnection(conexao)) { Cliente model = new Cliente(); model.Nome = "teste alterado"; model.Email = "email@teste.com"; model.Idade = 88; model.Pais = "Terra"; model.ClienteId = 2; 
		           
		try  | 
		
4- Excluir Dados
		static async void Deletar(string conexao) { int id = 2; using (var db = new SqlConnection(conexao)) { try { await db.OpenAsync(); var query = @"Delete from Clientes Where ClienteId=" + id; await db.ExecuteAsync(query,new { ClienteId = id }); Console.WriteLine($"Cliente excluido com sucesso"); } catch (Exception ex) { Console.WriteLine(ex.Message); } }         }
		 | 
		
Executando o projeto e realizando a consulta teremos o resultado a seguir:

Temos assim uma implementação básica do Dapper que pode ser uma opção muito versátil para projetos de pequeno porte para acessar dados com um bom desempenho.
Pegue o 
projeto completo aqui: 
CShp_Dapper1.zip
"E Jesus 
clamou, e disse: Quem crê em mim, crê, não em mim, mas naquele que me enviou.
E quem me vê a mim, vê aquele que me enviou.
Eu sou a luz que vim ao mundo, para que todo aquele que crê em mim não permaneça 
nas trevas."
João 12:44-46
Referências: