DJ

Diogo Júnior07/11/2025 13:00
Compartilhe

Resolvendo os principais erros do Entity Framework com MySQL e MariaDB

    Bom dia, boa tarde ou boa noite a todos que estão empenhados no bootcamp da avanade, bem durante o desenvolvimento de um dos projetos de uma Minimal API em .NET 8 com Entity Framework Core, enfrentei uma sequência de erros relacionados ao MySQL, que impediram a criação de migrations.

    O objetivo deste artigo é documentar o passo a passo da correção, explicando cada etapa e destacando as causas mais comuns — para que outros devs possam resolver isso rapidamente caso enfrente o mesmo problema.

    💥 O Problema

    Ao executar o comando:

    dotnet ef migrations add AdministradorMigration
    

    Recebia o seguinte erro:

    Access denied for user 'root'@'localhost' (using password: YES)
    

    E, após corrigir as credenciais, outro erro apareceu:

    No database provider has been configured for this DbContext.
    

    Esses dois erros estão entre os mais comuns para quem está configurando EF Core com MySQL ou MariaDB pela primeira vez.

    🔍 Investigando as causas

    1️⃣ MySQL vs MariaDB

    Mesmo instalando o MySQL, muitos sistemas vêm com MariaDB instalado por padrão (por exemplo, via XAMPP ou WAMP).

    Como ambos usam o mesmo comando mysql, isso pode causar conflito — e o EF Core tenta se conectar ao banco errado.

    2️⃣ Configuração incorreta do DbContext

    O Entity Framework Core precisa saber qual provider usar em tempo de design (quando você roda dotnet ef).

    Se o método OnConfiguring não estiver configurado corretamente, o comando de migrations falha.

    3️⃣ Senha e plugin de autenticação

    Em algumas instalações, o usuário root é criado sem o plugin mysql_native_password, o que impede o acesso pelo EF.

    🧩 Etapa 1: Verificando o MySQL instalado

    Abra o terminal e digite:

    mysql -V
    

    O resultado deve ser algo como:

    mysql  Ver 8.0.xx for Win64 on x86_64 (MySQL Community Server - GPL)
    

    Se aparecer MariaDB, significa que o banco ativo é outro.

    Verifique se há algum serviço ativo:

    Get-Service | findstr MariaDB
    

    Se aparecer algo, você pode parar o serviço com:

    net stop mariadb
    

    ⚙️ Etapa 2: Ajustando o Path

    Certifique-se de que o caminho do MySQL está no PATH do Windows:

    C:\Program Files\MySQL\MySQL Server 8.0\bin
    

    Depois, reinicie o terminal e teste novamente:

    mysql -V
    

    🔐 Etapa 3: Corrigindo o acesso ao usuário root

    Entre no MySQL:

    mysql -u root -p
    

    E atualize o plugin de autenticação:

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
    FLUSH PRIVILEGES;
    

    Depois teste novamente:

    mysql -u root -p
    

    🧠 Etapa 4: Configurando o projeto .NET

    📁 appsettings.json

    {
    "ConnectionStrings": {
      "mysql": "Server=localhost;Port=3306;Database=minimal_api;Uid=root;Pwd=root;"
    }
    }
    

    🧱 DbContexto.cs

    using Microsoft.EntityFrameworkCore;
    using minimal_api.Dominio.Entidades;
    
    namespace minimal_api.infraestrutura.Db
    {
      public class DbContexto : DbContext
      {
          private readonly IConfiguration _configuracaoAppSettings;
    
          public DbContexto(IConfiguration configuracaoAppSettings)
          {
              _configuracaoAppSettings = configuracaoAppSettings;
          }
    
          public DbSet<Administrador> Administradores { get; set; } = default!;
    
          protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
          {
              if (!optionsBuilder.IsConfigured)
              {
                  var stringConexao = _configuracaoAppSettings.GetConnectionString("mysql");
                  optionsBuilder.UseMySql(stringConexao, ServerVersion.AutoDetect(stringConexao));
              }
          }
      }
    }
    

    ⚙️ Program.cs

    using Microsoft.EntityFrameworkCore;
    using minimal_api.Dominio.DTOs;
    using minimal_api.infraestrutura.Db;
    
    var builder = WebApplication.CreateBuilder(args);
    
    builder.Services.AddDbContext<DbContexto>(options =>
    {
      var connectionString = builder.Configuration.GetConnectionString("mysql");
      options.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString));
    });
    
    var app = builder.Build();
    
    app.MapGet("/", () => "Hello World!");
    
    app.MapPost("/login", (LoginDTO loginDTO) =>
    {
      if (loginDTO.Email == "adm@teste.com" && loginDTO.Senha == "123456")
          return Results.Ok("Login com sucesso");
      else
          return Results.Unauthorized();
    });
    
    app.Run();
    

    📦 Etapa 5: Instalando o provider MySQL do EF Core

    Execute no terminal:

    dotnet add package Pomelo.EntityFrameworkCore.MySql
    

    🚀 Etapa 6: Criando a migration

    Agora sim:

    dotnet ef migrations add AdministradorMigration
    

    Se tudo estiver correto, você verá:

    Build started...
    Build succeeded.
    Done. To undo this action, use 'ef migrations remove'
    

    🧩 Conclusão

    Esses erros acontecem com frequência quando o ambiente mistura MySQL e MariaDB ou quando o DbContext não está configurado para o modo design-time do Entity Framework.

    Seguindo as etapas acima, você garante que:

    ✅ O banco ativo é o MySQL 8.0

    ✅ O usuário root (ou outro) está com o plugin correto

    ✅ O EF Core consegue criar e aplicar migrations sem erro

    💬 Considerações finais

    Esse processo me ensinou muito sobre a integração entre .NET + EF Core + MySQL, e espero que também ajude outros devs a evitarem horas de debugging desnecessário.

    Se quiser testar o código completo, o repositório pode ser iniciado facilmente com:

    dotnet new web -n minimal-api
    

    E aplicando as correções mostradas aqui. 🚀

    Compartilhe
    Recomendados para você
    Binance - Blockchain Developer with Solidity 2025
    Neo4J - Análise de Dados com Grafos
    Cognizant - Mobile Developer
    Comentários (1)
    DIO Community
    DIO Community - 07/11/2025 13:39

    Excelente, Diogo! Que artigo cirúrgico, essencial e de altíssimo valor prático! Você abordou a configuração do Entity Framework Core com MySQL e os erros de autenticação/provedor que paralisam o workflow de migrations.

    É fascinante ver como você transformou uma sequência de bugs de setup em uma lição completa de troubleshooting.

    Qual você diria que é o maior desafio para um desenvolvedor ao trabalhar com um projeto que usa o padrão MVC, em termos de manter a separação de responsabilidades e de evitar o acoplamento entre as três camadas, em vez de apenas focar em fazer a aplicação funcionar?