Class DatabaseInitializer
- Namespace
- Builvero.Infrastructure.Data
- Assembly
- Builvero.Infrastructure.dll
Database initializer that ensures database is created/migrated and default data is seeded. This implementation is idempotent and safe to run on every application startup. Includes retry logic with exponential backoff for handling transient connection failures. Retry configuration can be customized via appsettings.json:
- Database:MaxRetryAttempts (default: 10 for production, 5 for development)
- Database:BaseRetryDelaySeconds (default: 2)
- Database:MaxTotalRetryTimeSeconds (default: 300, i.e., 5 minutes)
Migration Flow:
- MigrateAsync() is called to apply all pending migrations
- MigrateAsync() will create the database if it doesn't exist
- MigrateAsync() will apply all migrations in order, creating all tables and schema
- After migrations are applied, seeding assumes the schema is fully migrated and all tables exist
- Seeding operations are idempotent and safe to run multiple times
public class DatabaseInitializer : IDatabaseInitializer
- Inheritance
-
DatabaseInitializer
- Implements
- Inherited Members
Constructors
DatabaseInitializer(ApplicationDbContext, IPasswordHasher, ILogger<DatabaseInitializer>, IConfiguration)
Initializes a new instance of the DatabaseInitializer class.
public DatabaseInitializer(ApplicationDbContext context, IPasswordHasher passwordHasher, ILogger<DatabaseInitializer> logger, IConfiguration configuration)
Parameters
contextApplicationDbContextThe database context to use for migrations and seeding.
passwordHasherIPasswordHasherThe password hasher service for creating default admin user.
loggerILogger<DatabaseInitializer>The logger for recording initialization progress and errors.
configurationIConfigurationThe configuration for reading retry settings.
Methods
InitializeAsync(CancellationToken)
Initializes the database by applying migrations and seeding default data.
public Task InitializeAsync(CancellationToken cancellationToken = default)
Parameters
cancellationTokenCancellationTokenCancellation token to cancel the operation.
Returns
- Task
A task representing the asynchronous initialization operation.
Remarks
This method performs the following operations in order:
- Applies all pending database migrations (creates database if it doesn't exist)
- Seeds default admin user (idempotent)
- Seeds default invitation code (idempotent)
- Seeds default builder tags (idempotent)
- Seeds skills catalog (idempotent)
- Seeds volunteer roles (idempotent)
All operations use retry logic with exponential backoff to handle transient connection failures common in Docker/production environments where the database may not be immediately available.