C# Academy · Aula

Migrações e gerenciamento de esquema

Crie, aplique e reverta migrações para evoluir o esquema do banco de dados com segurança.

Aula 2 de 413 etapas

Migrações e gerenciamento de esquema é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 4 aulas no total.

O que são as migrações do EF Core

Migrações são arquivos gerados por código que descrevem alterações incrementais no esquema do banco de dados. Em vez de escrever SQL DDL manualmente, EF Core o gera e aplica automaticamente, mantendo o código e o banco de dados sincronizados.

Instalando as ferramentas do EF Core

A ferramenta de CLI do EF Core (dotnet-ef) deve ser instalada globalmente (ou como uma ferramenta local) para executar comandos de migração no terminal.

# Install globally
dotnet tool install --global dotnet-ef

# Verify
dotnet ef --version

# Required NuGet packages in your project:
# Microsoft.EntityFrameworkCore.Design
# Microsoft.EntityFrameworkCore.SqlServer (or Sqlite, etc.)

Criando sua primeira migração

dotnet ef migrations add compara seu modelo atual com o último instantâneo e gera um arquivo de migração com métodos Up() (aplicar) e Down() (reverter).

# Create initial migration
dotnet ef migrations add InitialCreate

# Output files created:
# Migrations/20240101_InitialCreate.cs       <- Up/Down
# Migrations/20240101_InitialCreate.Designer.cs
# Migrations/AppDbContextModelSnapshot.cs   <- current model

Dentro de um arquivo de migração

Cada migração tem um método Up (aplica as alterações) e um método Down (reverte-as). EF Core gera esses métodos automaticamente a partir das diferenças do modelo.

public partial class InitialCreate : Migration
{
    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.CreateTable(
            name: "Products",
            columns: table => new
            {
                Id    = table.Column<int>(nullable: false)
                             .Annotation("SqlServer:Identity", "1, 1"),
                Name  = table.Column<string>(maxLength: 200, nullable: false),
                Price = table.Column<decimal>(type: "decimal(18,2)", nullable: false)
            },
            constraints: table => table.PrimaryKey("PK_Products", x => x.Id));
    }

    protected override void Down(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.DropTable(name: "Products");
    }
}

Aplicando migrações

dotnet ef database update aplica todas as migrações pendentes. EF Core rastreia quais migrações foram executadas na tabela __EFMigrationsHistory.

# Apply all pending migrations
dotnet ef database update

# Apply up to a specific migration
dotnet ef database update AddProductIndex

# Roll back to a previous migration
dotnet ef database update InitialCreate

Migração programática na inicialização

Em produção, você pode aplicar migrações programaticamente na inicialização para que o banco de dados esteja sempre atualizado, sem etapas manuais da CLI.

var app = builder.Build();

// Apply pending migrations at startup
using (var scope = app.Services.CreateScope())
{
    var db = scope.ServiceProvider.GetRequiredService<AppDbContext>();
    await db.Database.MigrateAsync();
}

app.Run();

Adicionando uma coluna em uma nova migração

Adicione uma propriedade à sua entidade e crie uma nova migração. EF Core detecta a alteração e gera uma operação AddColumn.

// 1. Add property to entity
public class Product
{
    public int Id { get; set; }
    public string Name { get; set; } = "";
    public decimal Price { get; set; }
    public string? Description { get; set; } // NEW
}

// 2. Generate migration
// dotnet ef migrations add AddProductDescription

// Generated Up():
migrationBuilder.AddColumn<string>(
    name: "Description",
    table: "Products",
    nullable: true);

Inserção de dados nas migrações

Use HasData em OnModelCreating para inserir dados de referência. EF Core os inclui na migração Up como instruções INSERT.

modelBuilder.Entity<Category>().HasData(
    new Category { Id = 1, Name = "Electronics" },
    new Category { Id = 2, Name = "Books" },
    new Category { Id = 3, Name = "Clothing" }
);

// Then regenerate the migration:
// dotnet ef migrations add SeedCategories

SQL personalizado nas migrações

Quando precisar de DDL que EF Core não consiga gerar automaticamente (gatilhos, exibições, procedimentos armazenados), use migrationBuilder.Sql().

protected override void Up(MigrationBuilder migrationBuilder)
{
    migrationBuilder.Sql(@"
        CREATE VIEW vw_ActiveProducts AS
        SELECT Id, Name, Price
        FROM Products
        WHERE IsActive = 1
    ");
}

protected override void Down(MigrationBuilder migrationBuilder)
{
    migrationBuilder.Sql("DROP VIEW vw_ActiveProducts");
}

Removendo uma migração

Se ainda não tiver aplicado uma migração, você poderá excluí-la com dotnet ef migrations remove. Somente a última migração pode ser removida dessa forma.

# Remove the last unapplied migration
dotnet ef migrations remove

# List all migrations and their status
dotnet ef migrations list

# Script all migrations to SQL (for DBA review)
dotnet ef migrations script --output deploy.sql

Na prática: estratégia de migração para CI/CD

Em um fluxo de CI/CD, gere um script de migração e permita que um DBA o revise antes de aplicá-lo em produção — nunca execute MigrateAsync() cegamente em sistemas críticos de produção.

# Generate idempotent script for all pending migrations
dotnet ef migrations script --idempotent --output migrations.sql

# Review migrations.sql, then apply via sqlcmd / psql:
# sqlcmd -S server -d db -i migrations.sql

Verificação rápida

Qual tabela do EF Core registra quais migrações já foram aplicadas a um banco de dados?

Revisão: migrações e gerenciamento de esquemas

Principais conclusões:

  • dotnet ef migrations add <Name> gera arquivos de alterações incrementais do esquema
  • Cada migração tem métodos Up() (aplicar) e Down() (reverter)
  • dotnet ef database update aplica as migrações pendentes
  • Use MigrateAsync() na inicialização do app para implantações automatizadas
  • Gere scripts SQL idempotentes para revisão do DBA nos fluxos de produção
Grátis para começar

Aprenda C# com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
93
Aulas
346

Perguntas Frequentes

A aula “Migrações e gerenciamento de esquema” é grátis?

Sim — o texto completo de “Migrações e gerenciamento de esquema” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 4 aulas no total.

O que vou aprender em “Migrações e gerenciamento de esquema”?

Crie, aplique e reverta migrações para evoluir o esquema do banco de dados com segurança. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C# Academy?

Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Migrações e gerenciamento de esquema”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C# Academy?

Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Fundamentos de DbContext e DbSet
  2. Migrações e gerenciamento de esquema
  3. Operações CRUD com EF Core
  4. Relacionamentos: um para muitos e muitos para muitos
← Voltar para C# Academy