È possibile applicare tutte le migrazioni utilizzando il metodo di estensione RelationalDatabaseFacadeExtensions.Migrate
. per esempio
if (_ctx.Database.GetPendingMigrations().Any())
{
//Apply migration
_ctx.Database.Migrate();
}
Tuttavia, ho un requisito specifico per eseguire le seguenti azioni di migrazione in fase di runtime:
Esiste un metodo che posso utilizzare per applicare tutte le migrazioni fino a una migrazione specifica (denominata) in fase di esecuzione (ad esempio, un equivalente al comando .net Core CLI dotnet ef database update
)?
È possibile utilizzare il metodo di estensione GetPendingMigrations della classe DatabaseFacade
(restituito dalla proprietà Database
di DbContext
) per ottenere l'elenco dei nomi di migrazione in sospeso.
Quindi è possibile ottenere il servizio IMigrator
e utilizzare il metodo Migrate
passando ciascun nome di migrazione di destinazione:
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
DbContext db = ...;
var pendingMigrations = db.Database.GetPendingMigrations().ToList();
if (pendingMigrations.Any())
{
var migrator = db.Database.GetService<IMigrator>();
foreach (var targetMigration in pendingMigrations)
migrator.Migrate(targetMigration);
}