Table of Contents

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

context ApplicationDbContext

The database context to use for migrations and seeding.

passwordHasher IPasswordHasher

The password hasher service for creating default admin user.

logger ILogger<DatabaseInitializer>

The logger for recording initialization progress and errors.

configuration IConfiguration

The 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

cancellationToken CancellationToken

Cancellation token to cancel the operation.

Returns

Task

A task representing the asynchronous initialization operation.

Remarks

This method performs the following operations in order:

  1. Applies all pending database migrations (creates database if it doesn't exist)
  2. Seeds default admin user (idempotent)
  3. Seeds default invitation code (idempotent)
  4. Seeds default builder tags (idempotent)
  5. Seeds skills catalog (idempotent)
  6. 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.