using Elsa.EntityFrameworkCore.Common; using Elsa.Quartz.EntityFrameworkCore.SqlServer; using Elsa.Quartz.Features; using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Quartz; // ReSharper disable once CheckNamespace namespace Elsa.EntityFrameworkCore.Extensions; /// /// Provides extensions to configure EF Core to use SQL Server. /// [PublicAPI] public static class SqlServerQuartzExtensions { /// /// Configures the to use the SQL Server job store. /// public static QuartzFeature UseSqlServer(this QuartzFeature feature, string connectionString = Constants.DefaultConnectionString, bool useClustering = true) { feature.Services.AddDbContextFactory(options => { // Use SQL Server migrations. options.UseSqlServer(connectionString, sqlServerDbContextOptionsBuilder => { sqlServerDbContextOptionsBuilder.MigrationsAssembly(typeof(SqlServerQuartzDbContext).Assembly.GetName().Name); }); }); feature.ConfigureQuartz += quartz => { quartz.UsePersistentStore(store => { store.UseNewtonsoftJsonSerializer(); store.UseSqlServer(options => { options.ConnectionString = connectionString; options.TablePrefix = "[quartz].qrtz_"; }); if (useClustering) store.UseClustering(); }); }; // Configure the Quartz hosted service to run migrations. feature.Module.ConfigureHostedService>(-100); return feature; } }