Migraciones de bases de datos en C# (.NET): Entity Framework, FluentMigrator y otros enfoques

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Migraciones de bases de datos en C# (.NET): Guía completa



Gestionar los cambios en el esquema de la base de datos es una tarea crítica en el desarrollo de cualquier aplicación en C# (.NET). Las migraciones permiten versionar, rastrear y aplicar automáticamente los cambios en la estructura de la BD (agregar tablas, columnas, índices) de forma sincronizada con el código de la aplicación. En el ecosistema .NET existen varias herramientas maduras para esta tarea. En este artículo analizaremos en detalle tres enfoques principales: el mecanismo integrado de Entity Framework Core, y las bibliotecas especializadas FluentMigrator y DbUp.



1. Entity Framework Core Migrations (EF Core)



La forma más popular para proyectos que ya utilizan el ORM Entity Framework Core. Las migraciones están estrechamente integradas con tu modelo de datos (enfoque Code-First).



Instalación y configuración

Para trabajar con migraciones necesitarás instalar el paquete:

dotnet add package Microsoft.EntityFrameworkCore.Tools


Creación y aplicación de una migración

Después de modificar tus modelos de C# (por ejemplo, agregar una nueva propiedad Email a la clase User), ejecuta en la terminal:

dotnet ef migrations add AddEmailToUserdotnet ef database update

El primer comando creará un archivo de migración con código C# generado automáticamente. El segundo lo aplicará a tu base de datos.



Ejemplo de código de migración (archivo generado):

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"); }}

El método Up aplica los cambios, Down los revierte.



Ventajas y desventajas de EF Core Migrations

  • Ventajas: Integración estrecha con los modelos, generación automática de código, soporte para reversiones, integrado en el ecosistema .NET.
  • Desventajas: Dependencia de EF Core, complejidad al trabajar con cambios no triviales (por ejemplo, renombrar columnas), posibles problemas de conflictos en equipo.


2. FluentMigrator



Es una biblioteca independiente y ligera para migraciones, no vinculada a un ORM específico. Las migraciones se escriben manualmente en C# utilizando una interfaz fluida.



Instalación

dotnet add package FluentMigrator


Ejemplo de migración

[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"); }}


Ejecución de migraciones

Para ejecutar las migraciones se utiliza un runner. Ejemplo de configuración en 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();


Ventajas de F

Recommendations