2
respostas

[Dúvida] Erro na hora de fazer a primeira migration

Na hora de adicionar a migration de este erro e não sei como proceder e nem o que fazer depois disso aqui, já tentei de tudo e nada funcionou. Se alguém conseguir me ajudar ou passar algum tutorial pra resolver ajudaria muito.

Momento exato do erro de adicionar a migration

Segue os meus códigos abaixo:

launchSettings.json

{
  "$schema": "http://json.schemastore.org/launchsettings.json",
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:20894",
      "sslPort": 44325
    }
  },
  "profiles": {
    "http": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": false,
      "launchUrl": "swagger",
      "applicationUrl": "http://localhost:5117",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "https": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "launchUrl": "swagger",
      "applicationUrl": "https://localhost:7164;http://localhost:5117",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

"LivroController.cs"

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using SistemaBiblioteca.Models;

namespace SistemaBiblioteca.Controllers;

[ApiController]
[Route("[controller]")]
public class LivroController : ControllerBase
{

    private static List<Livro> livros = new List<Livro>();
    private static int id = 0;

    [HttpPost]
    public IActionResult AdicionaLivro([FromBody] Livro livro)
    {
        livro.Id = id++;
        livros.Add(livro);
        return CreatedAtAction(nameof(RecuperaLivroPorId), 
            new {id = livro.Id},
            livro);
    }

    [HttpGet]
    public IEnumerable<Livro> RecuperaLivros([FromQuery] int skip = 0,
        [FromQuery] int take = 50)
    {
        return livros.Skip(skip).Take(take);
    }

    [HttpGet("{id}")]
    public IActionResult RecuperaLivroPorId(int id)
    {
        var livro = livros.FirstOrDefault(livro => livro.Id == id);
        if (livro == null) return NotFound();
        return Ok(livro);
    }
}
 

LivroContext.cs

using Microsoft.EntityFrameworkCore;
using SistemaBiblioteca.Models;

namespace SistemaBiblioteca.Data
{
    public class LivroContext : DbContext
    {
        public LivroContext(DbContextOptions<LivroContext> opts)
            : base(opts)
        {

        }

        public DbSet<Livro> Livros { get; set; }
    }
}

Livro.cs

using System.ComponentModel.DataAnnotations;

namespace SistemaBiblioteca.Models;

public class Livro
{
    [Key]
    [Required]
    public int Id { get; set; }
    [Required(ErrorMessage = "O título do livro é obrigatório")]
    public string Titulo { get; set; }
    [Required(ErrorMessage = "O gênero do livro é obrigatório")]
    [MaxLength(50, ErrorMessage = "O tamanho do gênero não pode exceder 30 caracteres")]
    public string Genero { get; set; }
    [Required]
    [Range(45, 1000, ErrorMessage = "O livro deve ter entre 45 e 1000 páginas")]
    public int Paginas { get; set; }
}

appsettings.json

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "LivroConnection": "server=localhost;database=livro;user=root;password=root"
  }
}

Program.cs

using SistemaBiblioteca.Data;
using Microsoft.EntityFrameworkCore;

var builder = WebApplication.CreateBuilder(args);

var connectionString = builder.Configuration.GetConnectionString
    ("LivroConnection");

builder.Services.AddDbContext<LivroContext>(opts => 
    opts.UseMySql(connectionString,ServerVersion.AutoDetect
     (connectionString)));

// Add services to the container.

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();
2 respostas

Olá, Danilo.

Tudo bem?

Pelo erro exibido na imagem, parece que o Entity Framework não está conseguindo se conectar ao MySQL. A mensagem "Unable to connect to any of the specified MySQL hosts" sugere um problema de conexão com o banco de dados. Aqui estão algumas etapas que você pode seguir para tentar resolver esse problema:

  1. Verificar a String de Conexão: Certifique-se de que a string de conexão especificada no seu arquivo appsettings.json está correta. Verifique o servidor, nome do banco de dados, usuário e senha. A string de conexão deveria se parecer com isso:

    "ConnectionStrings": {
        "LivroConnection": "server=localhost;database=livro;user=root;password=root"
    }
    

    Certifique-se de que o banco de dados livro existe no seu MySQL e que o usuário root tem permissão para acessá-lo.

  2. Verificar o Servidor MySQL: Certifique-se de que o servidor MySQL está em execução. Você pode verificar isso usando o MySQL Workbench ou qualquer outra ferramenta de gerenciamento de banco de dados.

  3. Firewall e Configurações de Rede: Se você estiver em um ambiente de desenvolvimento local, geralmente isso não é um problema. No entanto, se você estiver tentando se conectar a um servidor remoto, verifique se as configurações de firewall e rede permitem conexões no porto do MySQL (geralmente 3306).

  4. Pacotes do Entity Framework: Verifique se você instalou o pacote NuGet Pomelo.EntityFrameworkCore.MySql e se ele está na versão compatível com o .NET 6. Você pode instalar ou atualizar este pacote através do comando:

    dotnet add package Pomelo.EntityFrameworkCore.MySql --version 6.x.x
    

    Substitua 6.x.x pela versão mais recente compatível com o .NET 6.

  5. Rebuild do Projeto: Às vezes, um simples rebuild do projeto pode resolver problemas de conexão devido a configurações desatualizadas. Tente reconstruir seu projeto e execute novamente o comando de migração.

  6. Logs de Erro: Verifique os logs de erro do .NET e do MySQL para obter mais detalhes sobre o que pode estar causando o problema.

Após verificar e ajustar esses pontos, tente executar novamente o comando Add-Migration. Se o problema persistir, pode ser útil verificar se há alguma configuração específica do MySQL que está impedindo a conexão.

Espero que essas sugestões ajudem a resolver o problema! Espero ter ajudado e bons estudos!

Ok, muito obrigado Renan!