Migrações de banco de dados em C# (.NET): Entity Framework, FluentMigrator e outras abordagens

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Migrações de banco de dados em C# (.NET): Guia completo



Gerenciar alterações no esquema do banco de dados é uma tarefa crítica no desenvolvimento de qualquer aplicação em C# (.NET). As migrações permitem versionar, rastrear e aplicar automaticamente alterações na estrutura do BD (adição de tabelas, colunas, índices) de forma síncrona com o código da aplicação. No ecossistema .NET, existem várias ferramentas maduras para essa tarefa. Neste artigo, vamos detalhar três abordagens principais: o mecanismo embutido do Entity Framework Core, e as bibliotecas especializadas FluentMigrator e DbUp.



1. Migrações do Entity Framework Core (EF Core)



A forma mais popular para projetos que já utilizam o ORM Entity Framework Core. As migrações são fortemente integradas ao seu modelo de dados (abordagem Code-First).



Instalação e configuração

Para trabalhar com migrações, você precisará instalar o pacote:

dotnet add package Microsoft.EntityFrameworkCore.Tools


Criação e aplicação de migração

Após alterar seus modelos em C# (por exemplo, adicionar uma nova propriedade Email à classe User), execute no terminal:

dotnet ef migrations add AddEmailToUserdotnet ef database update

O primeiro comando cria um arquivo de migração com código C# gerado automaticamente. O segundo aplica essa migração ao seu banco de dados.



Exemplo de código de migração (arquivo gerado):

public partial class AddEmailToUser : Migration{    protected override void Up(MigrationBuilder migrationBuilder)    {        migrationBuilder.AddColumn<string>(            name: "Email",            table: "Users",            type: "nvarchar(200)",            nullable: true);    }

protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropColumn( name: "Email", table: "Users"); }}

O método Up aplica as alterações, e o Down as reverte.



Vantagens e desvantagens das Migrações do EF Core

  • Prós: Integração estreita com os modelos, geração automática de código, suporte a reversões, integrado ao ecossistema .NET.
  • Contras: Dependência do EF Core, complexidade ao lidar com alterações não triviais (ex.: renomear colunas), possíveis problemas de conflitos em equipe.


2. FluentMigrator



É uma biblioteca independente e leve para migrações, não vinculada a um ORM específico. As migrações são escritas manualmente em C# usando uma interface fluente.



Instalação

dotnet add package FluentMigrator


Exemplo de migração

[Migration(202310010001)]public class CreateUserTable : Migration{    public override void Up()    {        Create.Table("Users")            .WithColumn("Id").AsInt32().PrimaryKey().Identity()            .WithColumn("Name").AsString(100).NotNullable()            .WithColumn("Email").AsString(200).Nullable();                Create.Index("IX_Users_Email")            .OnTable("Users")            .OnColumn("Email");    }

public override void Down() { Delete.Table("Users"); }}


Executando migrações

Para executar as migrações, utiliza-se um runner. Exemplo de configuração no Program.cs:

var serviceProvider = new ServiceCollection()    .AddFluentMigratorCore()    .ConfigureRunner(rb => rb        .AddSqlServer()        .WithGlobalConnectionString("YourConnectionString")        .ScanIn(typeof(CreateUserTable).Assembly).For.Migrations())    .BuildServiceProvider();

using var scope = serviceProvider.CreateScope();var runner = scope.ServiceProvider.GetRequiredService<IMigrationRunner>();runner.MigrateUp();


Vantagens do F

Recommendations