Migraciones de bases de datos en C# (.NET) con Entity Framework
Al desarrollar aplicaciones en C# (.NET), una de las tareas clave es sincronizar el modelo de datos (clases de C#) con el esquema de la base de datos. Modificar manualmente tablas, columnas y relaciones es un proceso laborioso y propenso a errores. La solución a este problema son las migraciones de bases de datos, un mecanismo integrado de Entity Framework (EF) Core o Entity Framework 6. Las migraciones permiten aplicar automáticamente cambios a la estructura de la BD basándose en cambios en el código, conservando al mismo tiempo los datos existentes.
¿Qué son las migraciones y por qué son necesarias?
Una migración es un conjunto de instrucciones (código en C#) que describen cómo cambiar el esquema de la base de datos de una versión a otra. En lugar de escribir scripts SQL manualmente, el desarrollador modifica los modelos de C# (por ejemplo, agrega una nueva propiedad a una clase) y EF genera un archivo de migración. Luego, este archivo se aplica a la base de datos.
- Automatización: Elimina la escritura manual de SQL.
- Versionado: Cada migración es un archivo independiente con una marca de tiempo, lo que permite revertir los cambios.
- Seguridad de datos: Al agregar una columna, EF no elimina las filas existentes (a menos que se especifique lo contrario).
- Trabajo en equipo: Todos los miembros del equipo aplican las mismas migraciones, lo que evita divergencias en el esquema.
Preparación del proyecto
Para trabajar con migraciones, es necesario tener instalado el paquete Microsoft.EntityFrameworkCore.Tools (para EF Core) o EntityFramework (para EF6). Instalación a través de NuGet:
// Para EF Core (a través de Package Manager Console)Install-Package Microsoft.EntityFrameworkCore.Tools
// O a través de .NET CLIdotnet add package Microsoft.EntityFrameworkCore.ToolsTambién se necesita un contexto de base de datos que herede de DbContext. Ejemplo de un modelo simple:
public class Blog{ public int Id { get; set; } public string Title { get; set; } public string Content { get; set; }}
public class AppDbContext : DbContext{ public DbSet<Blog> Blogs { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer("Server=(localdb)\\\\mssqllocaldb;Database=MyBlogDb;Trusted_Connection=True;"); }}Creación de la primera migración
Abra Package Manager Console (en Visual Studio: View -> Other Windows -> Package Manager Console) o use .NET CLI. Ejecute el comando:
// A través de PMCAdd-Migration InitialCreate
// O a través de CLIdotnet ef migrations add InitialCreateDespués de la ejecución, aparecerá en el proyecto una carpeta Migrations con dos archivos:
XXXXXXXXXXXXXX_InitialCreate.cs— clase de migración con los métodosUp()(qué cambiar) yDown()(cómo revertir).AppDbContextModelSnapshot.cs— una instantánea del modelo actual.
Aplicación de la migración a la base de datos
Para crear o actualizar la BD a la última versión, ejecute:
// A través de PMCUpdate-Database
// A través de CLIdotnet ef database updateEF ejecutará todas las migraciones no aplicadas en orden. Si la base de datos no existe, se creará automáticamente.
Agregar un nuevo campo y crear una migración
Supongamos que decidimos agregar a la propiedad Blog la propiedad CreatedAt:
public class Blog{ public int Id { get; set; } public string Title { get; set; } public string Content { get; set; } public DateTime CreatedAt { get; set; } // nuevo campo}Ahora creamos una nueva migración:
Add-Migration También en la biblioteca
Procesamiento de JSON en Rust: serde_json, simd-json, json5 y otras bibliotecas
Validación de datos en Kotlin: bibliotecas y enfoques
Internacionalización (i18n) en C# (.NET): guía completa