Normalmente, quando trabalhamos com **EF Core** e **Migrations,** precisamos rodar comandos manualmente para aplicar mudanças no banco de dados do projeto, como: dotnet ef migrations add NomeDaMigracao e dotnet ef database update. O código apresentado automatiza esse processo, garantindo que qualquer alteração na estrutura do banco (nova tabela, coluna, chave estrangeira, etc.) seja aplicada na inicialização do sistema.

Vamos usar a base do exemplo do artigo de como configurar conexão do banco de dados e adicionar mais um método. Ele será chamado de UseDatabaseConfiguration. Ele é um método de extensão que, ao ser chamado durante o ciclo de vida da aplicação, garante que o banco de dados seja configurado corretamente, migrado e se necessário criado.

Executando execução de migraçaão automática e criação do banco

public static class DataBaseConfig
{
    public static void AddDataBaseConfiguration(this IServiceCollection services, IConfiguration configuration)
    {
        services.
            AddDbContext<ALContext>(options =>
            options.UseSqlServer(configuration.GetConnectionString("ALConnection")));
    }

    public static void UseDatabaseConfiguration(this IApplicationBuilder app)
    {
        using var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope();
        using var context = serviceScope.ServiceProvider.GetService<TFContext>();

        if (context == null)
            throw new InvalidOperationException("O contexto do banco de dados não pôde ser resolvido. Verifique a injeção de dependência.");
        
        context.Database.Migrate();
    }
}
  1. Cria um escopo de serviço temporário: Isso permite obter uma instância do ALContext, evitando problemas de ciclo de vida da injeção de dependência.
  2. Obtém o DbContext do banco de dados (ALContext).
  3. Aplica todas as migrações pendentes (context.Database.Migrate();).

Chamando as configurações no Startup

No arquivo Program.cs ou Startup.cs, chamamos esses métodos para garantir que o banco de dados seja configurado e atualizado corretamente:

using AL.WebApi.Configuration;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers();

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

// 🔥 Adiciona a configuração do banco na injeção de dependência
**builder.Services.AddDataBaseConfiguration(builder.Configuration);**

var app = builder.Build();

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

// 🔥 Garante que o banco está atualizado ao iniciar o sistema
**app.UseDatabaseConfiguration();**

app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();

Migrações