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. 🚀


