using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.Extensions.DependencyInjection; using Quadarax.Application.QLiberace.Base; using Quadarax.Foundation.Core.QConsole; namespace Quadarax.Application.QLiberace.Console.Commands.Base { internal abstract class DbMigrationCommand : DbContextCommand { #region *** Properties *** #endregion #region *** Constructor *** protected DbMigrationCommand(Engine engine) : base(engine) { } #endregion #region *** EXECUTE *** #endregion #region *** Private operations *** //src: https://makolyte.com/ef-core-apply-migrations-programmatically/ protected void ApplyMigration(QlbrcDbContext context, string? migrationCode = null) { var migrator = context.GetInfrastructure().GetService(); if (migrator == null) throw new InvalidOperationException($"Cannot obtain service IMigrator from EFC6 infrastructure."); migrator.Migrate(migrationCode); var lastAppliedMigration = (context.Database.GetAppliedMigrations()).Last(); WriteInfo($"You're now on schema version: {lastAppliedMigration}"); } protected bool CheckPendingMigrations(QlbrcDbContext context) { return context.Database.GetPendingMigrations().Any(); } #endregion } }