9
respostas

Não estou conseguindo gerar a pasta Migrations

PessoALL,

Não estou conseguindo gerar nem a pasta "Migrations" e nem a classe para o "UsuariosAPI".

A mensagem de erro é:

Não é possível resolver o serviço para o tipo 'Microsoft.EntityFrameworkCore.Storage.TypeMappingSourceDependencies' ao tentar ativar 'MySql.EntityFrameworkCore.Storage.Internal.MySQLTypeMappingSource'.

System.InvalidOperationException: Unable to resolve service for type 'Microsoft.EntityFrameworkCore.Storage.TypeMappingSourceDependencies' while attempting to activate 'MySql.EntityFrameworkCore.Storage.Internal.MySQLTypeMappingSource'.

Aqui está a tela completa:

Tela com todo o texto do erro no Add-Migrations

Algum ideia do que falou ou eu fiz errado?

Agradeço qualquer ajuda,

Fabio I.

9 respostas

Olá Fabio Ingenito tente verificar os pacotes que você esta usando se possível, mande um print da sua program, e sua UserDbContext.

Diogo,

Estou usando os pacotes do ".Net 6" e recriei o arquivo startup.cs.

Pacotes:

Pcotes .Net 6

UserDbContext:

using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;

namespace UsuariosApi.Data;

public class UserDbContext : IdentityDbContext<IdentityUser<int>, IdentityRole<int>, int>
{
    public UserDbContext(DbContextOptions<UserDbContext> opt) : base(opt)
    {

    }
}

Startup.cs:

using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using UsuariosApi.Data;

namespace UsuariosApi.Startup;

internal class Startup : IStartup
{
    #region Propriedades
    public IConfiguration Configuration { get; }
    #endregion

    #region Construtores
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }
    #endregion

    #region Métodos

    public void ConfigureServices(IServiceCollection services)
    {
        //Serviço de Banco de Dados
        services.AddDbContext<UserDbContext>(options =>
        {
            options.UseMySQL(Configuration.GetConnectionString("UsuarioConnection"));
        });

        //Utilizar os Identities:
        services.AddIdentity<IdentityUser<int>, IdentityRole<int>>()
            .AddEntityFrameworkStores<UserDbContext>();

        //Serviço Automapper inicializado:
        services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
        services.AddControllers();
        services.AddEndpointsApiExplorer();
        services.AddSwaggerGen();
    }

    public void Configure(WebApplication app, IWebHostEnvironment environment)
    { 
        if (app.Environment.IsDevelopment())
        {
            app.UseSwagger();
            app.UseSwaggerUI();
        }

        app.UseHttpsRedirection();
        app.UseAuthorization();
        app.MapControllers();
    }
    #endregion
}

Program.cs:

using UsuariosApi.Startup;

WebApplicationBuilder? _ = WebApplication.CreateBuilder(args).UseStartup<Startup>();

[]'s,

Fabio I.

Olá Fabio Ingenito, Acho que você esta esquecendo de usar :

public DbSet<"tipo esperado"> "exemplo" { get; set; }

na sua dbcontext, para o migration poder criar suas tabelas no banco

outra dica deixar comentários de coisas óbvias é considerado uma má pratica por exemplo #region Construtores, acaba sendo desnecessário

Então Diogo...

Eu poderia até fazer isto baseado na classe Modelo "Usuario.cs" :

public DbSet<Usuario> Usuarios { get; set; }

Mas as tabelas criadas no Banco de Dados são tipo Wizard e criadas para o do controlador de usuários automático, veja:

Tabelas Geradas dentro do MySQL

O instrutor, deixou a classe "UserDbContext" deste jeito (isso indica que irá herdar da "BASE"):

Como ficou a estrutura do UserDbContext

[]'s,

Fabio I.

Olá Fabio como que está sua connection string ?, se você conseguir entrar no canal do discord na alura e me procurar eu posso te ajudar

DiogoSoares#5628

Diogo,

Acredito que minha "connection string" esteja no padrão...

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "UsuarioConnection": "server=localhost;Database=usuarioDB;Uid=teste;Pwd=teste"
  }
}

[]'s,

Fabio I.

Diogo,

Fiquei com uma dúvida no Discord... fiz uma busca com a lupa e você apareceu, mas como eu mando uma mensagem? Não vi a opção em lugar nenhum...

Obrigado,

Fabio I.