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;
}
}