using Elsa.Common; using Elsa.Common.RecurringTasks; using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Options; // ReSharper disable once CheckNamespace namespace Elsa.Persistence.EFCore; /// /// Executes EF Core migrations using the specified type. /// [UsedImplicitly] [SingleNodeTask] [Order(-100)] public class RunMigrationsStartupTask(IDbContextFactory dbContextFactory, IOptions options) : IStartupTask where TDbContext : DbContext { /// public async Task ExecuteAsync(CancellationToken cancellationToken) { options.Value.RunMigrations.TryGetValue(typeof(TDbContext), out bool shouldRunMigrations); if (!shouldRunMigrations) return; var dbContext = await dbContextFactory.CreateDbContextAsync(cancellationToken); await dbContext.Database.MigrateAsync(cancellationToken); } }