TickerQ EF Core
Installation
TickerQ.EntityFrameworkCore is a package that extends the functionality of TickerQ.
You can install it with:
cli> dotnet add package TickerQ.EntityFrameworkCore
pmPM> NuGet\Install-Package TickerQ.EntityFrameworkCore
pm<PackageReference Include="TickerQ.EntityFrameworkCore" Version="*" />
Configure Options
Add options in TickerQ.
csharp
using TickerQ.DependencyInjection;
using TickerQ.EntityFrameworkCore.DependencyInjection;
....
services.AddTickerQ(opt =>
{
// Set fallback time out to check for missed jobs and execute.
opt.UpdateMissedJobCheckDelay(timeSpan: ...);
// Set name of instance, default is Environment.MachineName.
opt.SetInstanceIdentifier(identifierName: ...)
....
// Define the DbContext to use for storing Tickers.
options.AddOperationalStore<MyDbContext>(efOpt =>
{
efOpt.UseModelCustomizerForMigrations(); // Applies custom model customization only during EF Core migrations
efOpt.CancelMissedTickersOnApplicationRestart(); // Useful in distributed mode
}); // Enables EF-backed storage
});
❗️If Not Using UseModelCustomizerForMigrations()
You must apply TickerQ configurations manually in your DbContext
:
csharp
public class MyDbContext : DbContext
{
public MyDbContext(DbContextOptions<MyDbContext> options)
: base(options) { }
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// Apply TickerQ entity configurations explicitly
builder.ApplyConfiguration(new TimeTickerConfigurations());
builder.ApplyConfiguration(new CronTickerConfigurations());
builder.ApplyConfiguration(new CronTickerOccurrenceConfigurations());
// Alternatively, apply all configurations from assembly:
// builder.ApplyConfigurationsFromAssembly(typeof(TimeTickerConfigurations).Assembly);
}
}
💡 Recommendation:
UseUseModelCustomizerForMigrations()
to cleanly separate infrastructure concerns from your core domain model, especially during design-time operations like migrations.
Note: If you're using third-party libraries (e.g., OpenIddict) that also overrideIModelCustomizer
, you must either merge customizations or fall back to manual configuration insideOnModelCreating()
to avoid conflicts.
Add Migrations
Migrations would be created for Context
that is declared at AddOperationalStore
.
PM
PM> add-migration "TickerQInitialCreate" -c MyDbContext