4
respostas

Add-Migration AdicaoDaTabelaGenero Build started... Build failed.

A entidade Genero foi criada na pasta Modelos do projeto ScreenSound.Shared.Modelos. Foi adicionado o public DbSet Generos { get; set; } na classe ScreenSoundContext na pasta Banco, do projeto ScreenSound.Shared.Dados. Em várias tentativas do Add-Migration AdicaoDaTabelaGenero, retorno Build started seguido de Build failed.
Na console gerenciador de pacotes, em projeto padrão está selecionado o projeto ScreenSound.Shared.Dados. O que pode ser a razão do Build failed?

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
4 respostas

Olá José.
Vou tentar responder a sua duvida.
O erro "Build failed" durante o comando Add-Migration em um projeto .NET pode ocorrer por vários motivos, mas, com base na sua descrição, alguns fatores comuns podem ser responsáveis.
Vamos passar por alguns pontos de verificação para identificar a causa do erro.

  1. Verifique se a solução compila corretamente
    O erro de "Build failed" geralmente significa que há problemas de compilação no seu projeto. Antes de rodar o Add-Migration, tente compilar a solução (pressione Ctrl+Shift+B ou use o comando dotnet build no terminal) e veja se algum erro de compilação aparece. Pode haver algo de errado com o código que precisa ser corrigido antes de você executar a migração.
  2. Confirme o Projeto de Inicialização
    Quando você usa o comando Add-Migration, o projeto que está configurado como "startup project" (projeto de inicialização) deve ser o correto. Você mencionou que o ScreenSound.Shared.Dados está selecionado como projeto padrão. Certifique-se de que esse é realmente o projeto que contém a configuração do Entity Framework Core (com o DbContext e as migrações).
    Se o projeto que contém a configuração do DbContext não for o ScreenSound.Shared.Dados, altere o projeto de inicialização para o projeto correto. Você pode fazer isso clicando com o botão direito sobre o projeto na Solution Explorer e selecionando Set as StartUp Project ou usando o comando dotnet ef com a opção --startup-project.
  3. Verifique as dependências e pacotes NuGet
    O problema pode ser causado por dependências faltando ou versões incompatíveis do Entity Framework Core.
    Verifique se você tem o pacote NuGet do EF Core instalado corretamente no projeto.
    No terminal, execute o comando:
dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.Tools

Isso garante que os pacotes necessários para migrações e comunicação com o banco de dados estejam presentes.
4. Verifique se o DbSet foi configurado corretamente
A sua classe Genero e a configuração no DbContext precisam estar corretas. Certifique-se de que:

  • A classe Genero está na pasta correta e que não há problemas de namespaces.
  • No ScreenSoundContext (que herda de DbContext), você deve ter algo assim:
    public DbSet<Genero> Generos { get; set; }
    

Se a configuração do DbSet estiver incorreta ou a classe Genero não estiver configurada corretamente, isso pode causar falhas na migração.
5. Verifique a configuração do banco de dados no DbContext
Se o DbContext não estiver configurado corretamente no método ConfigureServices ou no seu Startup.cs, isso também pode resultar em falhas. No ConfigureServices, você deve ter algo como:

services.AddDbContext<ScreenSoundContext>(options =>
    options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

Ou, se estiver usando outro banco de dados, ajuste conforme necessário.
6. Limpe e reconstrua o projeto
Tente limpar e reconstruir a solução para garantir que não há arquivos antigos causando problemas. Execute os seguintes comandos:

dotnet clean
dotnet build

Ou faça isso no Visual Studio através do menu Build > Clean Solution e depois Build > Rebuild Solution.

7. Erro Específico nas Migrations

Se o erro ocorrer durante a migração em si, tente criar uma nova migração limpa para ver se o problema persiste:

dotnet ef migrations add AdicaoDaTabelaGenero --verbose

A opção --verbose pode fornecer informações mais detalhadas sobre o que está falhando.

8. Verifique logs de erros no Visual Studio

Se você está usando o Visual Studio, tente verificar a janela de Output ou Error List para ver se há mensagens de erro específicas. Isso pode fornecer mais pistas sobre o que está causando o "Build failed".

Tem muita coisa para revisar.
Analisa ai com calma e depois me envia os resultados.
Comente qualquer duvida.
Bons estudos.

Ocorreu outro erro:
PM> Add-Migration AdicaoDaTabelaGenero
Build started...
Build succeeded.
No DbContext was found in assembly 'ScreenSound'. Ensure that you're using the correct assembly and that the type is neither abstract nor generic.

O que diz a transcrição do módulo 04.Relacionando Genero:
"Para criar a nossa migração, vamos à barra de menu superior do projeto e alterar de ScreenSound.API para ScreenSound. Feito isso, criaremos no terminal uma migração chamada AdicaoDaTabelaGenero.
Add-Migration AdicaoDaTabelaGenero"

O procedimento logo acima foi feito.

Program.cs, projeto ScreenSoound.API:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext();

Classe ScreenSoundContext, no projto ScreenSound.Shared.Dados
public class ScreenSoundContext : DbContext
{
public DbSet Artistas { get; set; }
public DbSet Musicas { get; set; }

public DbSet<Genero> Generos { get; set; }  

Program.cs, projeto ScreenSound
using ScreenSound.Banco;
using ScreenSound.Menus;
using ScreenSound.Modelos;

var context = new ScreenSoundContext();

Consegui resolver, selecionando o projeto ScreenSound.Shared.Dados na aba "Package Manager Console", em "Default project".
Observei que ao executar o Update-Database deu erro por já existir a tabela Artistas.
O Update-Database após o "Add-Migration AdicaoDaTabelaGenero" recria todas as tabelas do Banco de Dados? É isso mesmo?

Ola.
O comando Update-Database não recria todas as tabelas do banco de dados a cada nova migration.
Ele aplica apenas as alterações (as diferenças) que estão na migration que ainda não foi executada.
Quando você executa Add-Migration NomeDaMigration, o Entity Framework gera um arquivo dentro da pasta Migrations com as instruções necessárias para criar, alterar ou remover tabelas e colunas, de acordo com as mudanças feitas no modelo (DbContext).
Depois, ao executar Update-Database, o EF compara as migrations existentes no código com as que já foram aplicadas no banco.
Essa informação é armazenada em uma tabela interna chamada __EFMigrationsHistory.
Assim, o EF aplica somente as migrations que ainda não estão registradas nessa tabela.
Se ocorreu o erro dizendo que a tabela Artistas já existe, isso normalmente significa que o EF tentou criar novamente uma tabela que já está no banco. Isso pode acontecer em dois cenários principais:

  1. O banco foi recriado manualmente ou a tabela __EFMigrationsHistory foi apagada. Nesse caso, o EF entende que nenhuma migration foi aplicada e tenta executar todas desde o início.
  2. O comando foi executado com o projeto errado selecionado no “Package Manager Console”, e o EF acabou tentando aplicar migrations de outro assembly ou contexto.
    Para resolver:
  3. Verifique se o banco de dados contém a tabela __EFMigrationsHistory. Se ela não existir, o EF vai interpretar o banco como novo.
  4. Confirme que o projeto selecionado na aba “Package Manager Console” é o mesmo onde estão as migrations (no seu caso, ScreenSound.Shared.Dados).
  5. Se quiser recriar tudo do zero (perdendo os dados), execute:
    Drop-Database
    Update-Database
    
    Isso faz com que todas as tabelas sejam criadas novamente de acordo com as migrations.
  6. Se o banco já estiver consistente e você quiser apenas aplicar a nova migration, basta rodar:
    Update-Database
    

Dessa forma, apenas a nova migration será aplicada.
Em resumo, o comando Update-Database não recria todas as tabelas do banco, apenas aplica as alterações definidas nas novas migrations ainda não executadas. O erro de tabela existente ocorre geralmente por inconsistência entre o banco e o histórico de migrations.
Garantir que o projeto correto esteja selecionado e que o histórico esteja atualizado evita esse tipo de problema.
Qualquer duvida comente ai.
Bons estudos.