C# - CRUD com MySQL via console com EF Core
  Neste artigo vamos criar um projeto Console e realizar as operações CRUD com o MySQL usando o EF Core.


Vamos criar um projeto Console no  .NET 6 e usando o EF Core vamos realizar as operações CRUD com um banco de dados MySql.

 

 


 

Criando o projeto Console

 

Crie o projeto Console EFCore6_MySql no VS 2022 e a seguir inclua o pacote MySql.EntityFrameworkCore da Oracle no projeto.

 

No projeto vamos criar a pasta Data e nesta pasta vamos definir a entidade Cliente :

 

public class Cliente
{
    [Column("id")]
    public int Id { get; set; }
    [Column("nome")]
    public string? Nome { get; set; }
    [Column("email")]
    public string? Email { get; set; }
}

 

Nesta mesma pasta vamos criar o arquivo de contexto chamado AppDbContext que herda de DbContext:

 

using Microsoft.EntityFrameworkCore;
using System.Reflection;
namespace EFCore6_MySql.Data;
public class AppDbContext : DbContext
{
    public DbSet<Cliente>? Clientes { get; set; }
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        var connString = 
            "server=127.0.0.1;user id=root;password=Hw8vup5e;port=3306;database=cadastro";
        optionsBuilder.UseMySQL(connString, options =>
        {
            options.MigrationsAssembly(Assembly.GetExecutingAssembly().FullName);
        });
        base.OnConfiguring(optionsBuilder);
    }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        // mapeia as tabelas
        modelBuilder.Entity<Cliente>().ToTable("Clientes");
        base.OnModelCreating(modelBuilder);
    }
}

 

Neste código estamos definindo a string de conexão e realizando o mapeamento da entidade Cliente para a tabela Clientes.

 

Podemos criar a tabela no MySQL ou aplicar o Migrations usando os seguintes comandos da ferramenta EF Core Tools :

Criando o menu de opções na classe Program

 

Agora vamos definir o menu de opções na classe Program que vai permitir selecionar a opção para realizar a respectiva tarefa.

 

using EFCore6_MySql.Data;
Console.WriteLine("## Conexão com MySql ##");
while (true)
{
    Console.Write("\n(L)er e exibir dados");
    Console.Write("\n(I)ncluir dados");
    Console.Write("\n(A)tualizar dados");
    Console.Write("\n(D)eletar dados");
    Console.Write("\n(S)air\n");
    char opcao = Convert.ToChar(Console.ReadLine().ToLower());
    if (opcao == 'l')
        LerExibirDadosMySql();
    else if (opcao == 'i')
        IncluirDadosMySql();
    else if (opcao == 'a')
        AtualizarDadosMySql();
    else if (opcao == 'd')
        DeletarDadosMySql();
    else if (opcao == 's')
        break;
    else
        Console.WriteLine("\nOpção inválida");    
}

 

A seguir podemos definir os métodos para realizar as operações:

 

1- Ler e exibir dados

 

static void LerExibirDadosMySql()
{
    using (var dbContext = new AppDbContext())
    {
        foreach (var model in dbContext.Clientes)
        {
            Console.WriteLine($"id={model.Id} nome={model.Nome}");
        }
    }
}

 

2- Incluir dados

 

static void IncluirDadosMySql()
{
    Console.WriteLine("\nIncluir dados\n");    
    Console.Write("Nome  : \t");
    var nome = Console.ReadLine();
    Console.Write("Email : \t");
    var email = Console.ReadLine();
    Console.ReadKey();
    if (string.IsNullOrEmpty(nome) && string.IsNullOrEmpty(email))
    {
        Console.WriteLine("\nDados inválidos...\n");
    }
    else
    {
      using (var dbContext = new AppDbContext())
       {
            var testeModel = new Cliente
            {
                Nome = nome,
                Email = email
            };
            dbContext.Add(testeModel);
            dbContext.SaveChanges();
        }
        Console.WriteLine("\nDados incluidos...\n");
    }
}

3-  Atualizar dados

static void AtualizarDadosMySql()
{
    using (var dbContext = new AppDbContext())
    {
        var cliente = dbContext.Clientes.Where(record => record.Id == 2).FirstOrDefault();
        cliente.Nome = "Paulo da Silva";
        dbContext.Update(cliente);
        dbContext.SaveChanges();

    }
    Console.WriteLine("\nDados atualizados...\n");
}

Aqui estamos atualizando o registro de Id igual a 2.

4- Excluir dados

 

static void DeletarDadosMySql()
{
    using var dbContext = new AppDbContext();
    var cliente = dbContext.Clientes.Where(record => record.Id == 2).FirstOrDefault();
    if (cliente is not null)
    {
        dbContext.Remove(cliente);
        dbContext.SaveChanges();
    }
    Console.WriteLine("\nDados excluídos...\n");
}

Aqui estamos excluindo o registro de Id igual a 2.

Pegue o projeto aqui :  EFCore6_MySql.zip ... 

"Disse-lhe Jesus: Estou há tanto tempo convosco, e não me tendes conhecido, Filipe? Quem me vê a mim vê o Pai; e como dizes tu: Mostra-nos o Pai? "
João 14:9

Referências:


José Carlos Macoratti