Entity Framework Core Tutorial Migraciones
Las migraciones proporcionan una forma de aplicar incrementalmente los cambios de esquema a la base de datos para mantenerla sincronizada con su modelo de EF Core y preservar los datos existentes en la base de datos.
- Cuando comience a desarrollar sus aplicaciones, lo más probable es que vea cambios en su modelo con cambios en los requisitos.
- Cuando hay un cambio en un modelo, necesitamos mantener la base de datos sincronizada con el modelo.
- La función de migración le permite realizar cambios en su modelo y luego propagarlos a su esquema de base de datos.
Digamos que tenemos un modelo simple que contiene tres entidades.
public class Customer { public int CustomerId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string Address { get; set; } public virtual List<Invoice> Invoices { get; set; } } public class Invoice { public int Id { get; set; } public DateTime Date { get; set; } public int CustomerId { get; set; } [ForeignKey("CustomerId")] public virtual Customer Customer { get; set; } public virtual List<InvoiceItem> Items { get; set; } } public class InvoiceItem { public int InvoiceItemId { get; set; } public int InvoiceId { get; set; } public string Code { get; set; } [ForeignKey("InvoiceId")] public virtual Invoice Invoice { get; set; } }
Aquí está la clase de contexto.
public class MyContext : DbContext { public DbSet<Customer> Customers { get; set; } public DbSet<Invoice> Invoices { get; set; } public DbSet<InvoiceItem> InvoiceItems { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .UseSqlServer(@"Data Source=(localdb)\ProjectsV13;Initial Catalog=CustomerDB;"); } }
Añadir migración
Puede usar la migración para crear una base de datos inicial agregando el comando de migración inicial en la Consola del Administrador de paquetes .
PM> Add-Migration InitialCreate
InitialCreate es el nombre de la migración, y depende de usted qué desea especificar como nombre.
Los comandos de migración iniciales agregarán tres archivos a su proyecto en la carpeta Migraciones .
- _InitialCreate.cs: es el archivo principal de migraciones que realiza las operaciones necesarias para aplicar la migración en el método
Up()
y revertirlo al métodoDown()
. - _InitialCreate.Designer.cs: es un archivo de metadatos de migraciones y contiene información utilizada por EF.
- MyContextModelSnapshot.cs: es la instantánea de su modelo y se utiliza para determinar qué ha cambiado al agregar la próxima migración.
Ahora, para aplicar la migración a la base de datos para crear el esquema, ejecute el siguiente comando.
PM> Update-Database
Puedes ver esa base de datos creada con tres tablas.
Añadir otra migración
Ahora supongamos que desea agregar una propiedad PhoneNumber a la entidad del cliente.
public class Customer { public int CustomerId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string Address { get; set; } public string PhoneNumber { get; set; } public virtual List<Invoice> Invoices { get; set; } }
Después de realizar cambios en su modelo EF Core, el esquema de la base de datos no estará sincronizado. Para actualizarlo, necesitamos agregar otra migración mediante el comando Add-Migration
y llamar a esta migración AddPhoneNumber .
PM> Add-Migration AddPhoneNumber
Su archivo de migración se verá así.
public partial class AddPhoneNumber : Migration { protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.AddColumn<string>( name: "PhoneNumber", table: "Customers", nullable: true); } protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropColumn( name: "PhoneNumber", table: "Customers"); } }
Aplique la migración a la base de datos utilizando el siguiente comando.
PM> Update-Database
Eliminar migración
A veces, agrega una migración y se da cuenta de que necesita realizar cambios adicionales en su modelo EF Core antes de aplicarlo. Para eliminar la última migración, puede utilizar el siguiente comando.
PM> Remove-Migration
Revertir la migración
Si ya aplicó varias migraciones a la base de datos pero necesita revertirla, puede usar el comando Update-Database
pero también especificar el nombre de la migración a la que desea revertir.
PM> Update-Database LastGoodMigration