Created
February 17, 2024 09:44
-
-
Save marcin-burak/f3cb1c9142050f37cc282faca24757bc to your computer and use it in GitHub Desktop.
Entity Framework database initialization on ASP.NET startup
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public sealed class DatabaseInitialization(IOptionsSnapshot<SqlServerOptions> sqlServerOptions, IWebHostEnvironment environment, DatabaseContext databaseContext) | |
{ | |
private readonly IOptionsSnapshot<SqlServerOptions> _sqlServerOptions = sqlServerOptions; | |
private readonly IWebHostEnvironment _environment = environment; | |
private readonly DatabaseContext _databaseContext = databaseContext; | |
public static async ValueTask TryRunDatabaseInitialization(IServiceProvider serviceProvider, CancellationToken cancellationToken) | |
{ | |
using var dependencyInjectionScope = serviceProvider.CreateScope(); | |
var databaseInitialization = dependencyInjectionScope.ServiceProvider.GetRequiredService<DatabaseInitialization>(); | |
await databaseInitialization.TryRunDatabaseInitialization(CancellationToken.None); | |
} | |
private async ValueTask TryRunDatabaseInitialization(CancellationToken cancellationToken) | |
{ | |
if (_environment.IsProduction() || _sqlServerOptions.Value.RunMigrationsOnStartup is false) | |
{ | |
return; | |
} | |
await _databaseContext.Database.MigrateAsync(cancellationToken); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Other code skipped for brevity | |
await DatabaseInitialization.TryRunDatabaseInitialization(application.Services, CancellationToken.None); | |
await application.RunAsync(CancellationToken.None); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public sealed class SqlServerOptions | |
{ | |
public string ConnectionString { get; set; } = string.Empty; | |
public bool RunMigrationsOnStartup { get; set; } | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment