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: