using Elsa.Quartz.EntityFrameworkCore.Sqlite;
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 SQLite.
///
[PublicAPI]
public static class SqliteQuartzExtensions
{
///
/// Configures the to use the SQLite job store.
///
public static QuartzFeature UseSqlite(this QuartzFeature feature, string connectionString = Constants.DefaultConnectionString, bool useContextPooling = false)
{
if (useContextPooling)
feature.Services.AddPooledDbContextFactory(options => UseSqlite(connectionString, options));
else
feature.Services.AddDbContextFactory(options => UseSqlite(connectionString, options));
feature.ConfigureQuartz += quartz =>
{
quartz.UsePersistentStore(store =>
{
store.UseNewtonsoftJsonSerializer();
store.UseMicrosoftSQLite(connectionString);
});
};
feature.Module.ConfigureHostedService>(-100);
return feature;
}
private static void UseSqlite(string connectionString, DbContextOptionsBuilder options)
{
// Use SQLite migrations.
options.UseSqlite(connectionString, sqlite => { sqlite.MigrationsAssembly(typeof(SqliteQuartzDbContext).Assembly.GetName().Name); });
}
}