2
respostas

Erro ao executar o update-database para criação das tabela do projeto

Erro:

Unable to create a 'DbContext' of type ''. The exception 'Unable to resolve service for type 'Microsoft.EntityFrameworkCore.DbContextOptions' while attempting to activate 'ScreenSound.Banco.ScreenSoundContext'.' was thrown while attempting to create an instance. For the different patterns supported at design time, see https://go.microsoft.com/fwlink/?linkid=85172

Class de contexto:

using Microsoft.EntityFrameworkCore; using ScreenSound.Shared.Modelos.Modelos;

namespace ScreenSound.Banco;

public class ScreenSoundContext : DbContext { private readonly string connectionString = "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=ScreenSoundV0;Integrated Security=True;Encrypt=False;Trust Server Certificate=False;Application Intent=ReadWrite;Multi Subnet Failover=False";

public DbSet<Artista> Artistas { get; set; }
public DbSet<Musica> Musicas { get; set; }
public DbSet<Genero> Generos { get; set; }

public ScreenSoundContext(DbContextOptions options): base (options)
{
    
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    if (optionsBuilder.IsConfigured)
    {
        return;
    }

    optionsBuilder
        .UseSqlServer(connectionString)
        .UseLazyLoadingProxies();
}

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Musica>()
        .HasMany(c => c.Generos)
        .WithMany(c => c.Musicas);
}

}

2 respostas

Oii, Francisco, tudo bem?

O problema está na configuração do seu DbContext. O erro indica que não foi possível resolver o serviço para o tipo DbContextOptions enquanto tentava ativar ScreenSound.Banco.ScreenSoundContext. Isso normalmente aparece quando o DbContext não recebeu as opções de configuração da forma certa.

Uma maneira comum de configurar isso é no método ConfigureServices do arquivo Startup.cs.

Vou deixar um exemplo abaixo:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ScreenSoundContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
}

Ali em cima a "DefaultConnection" seria a sua string de conexão definida no arquivo appsettings.json:

"ConnectionStrings": {
    "DefaultConnection": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=ScreenSoundV0;Integrated Security=True;Encrypt=False;Trust Server Certificate=False;Application Intent=ReadWrite;Multi Subnet Failover=False"
}

Se outra dúvida surgir, estamos disponíveis.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Oi maria, tudo joia|

O professor do curso refatorou o código colocando a parte de dados em uma library que não tem uma class startup ou program, mas eu reolvi colocando uma sobrecarga no construtor da classe de contexto.

public ScreenSoundContext() {

} asim funcionou bem.

Muito obrigado pela sua atenção.