public static IServiceCollection AddAdminContext(this IServiceCollection services, Action <DbContextOptionsBuilder> optionsAction, JpDatabaseOptions options = null) { if (options == null) { options = new JpDatabaseOptions(); } RegisterDatabaseServices(services); var operationalStoreOptions = new OperationalStoreOptions(); services.AddSingleton(operationalStoreOptions); var storeOptions = new ConfigurationStoreOptions(); services.AddSingleton(storeOptions); services.AddDbContext <JPProjectAdminUIContext>(optionsAction); services.AddDbContext <EventStoreContext>(optionsAction); DbMigrationHelpers.CheckDatabases(services.BuildServiceProvider(), options).Wait(); return(services); }
public static async Task CheckDatabases(IServiceProvider serviceProvider, JpDatabaseOptions options) { using var scope = serviceProvider.GetRequiredService <IServiceScopeFactory>().CreateScope(); var id4Context = scope.ServiceProvider.GetRequiredService <JpProjectAdminUiContext>(); await DbHealthChecker.TestConnection(id4Context); await ValidateIs4Context(options, id4Context); }
private static async Task ValidateIs4Context(JpDatabaseOptions options, JPProjectAdminUIContext id4AdminUiContext) { var configurationDatabaseExist = await DbHealthChecker.CheckTableExists <Client>(id4AdminUiContext); var operationalDatabaseExist = await DbHealthChecker.CheckTableExists <PersistedGrant>(id4AdminUiContext); var isDatabaseExist = configurationDatabaseExist && operationalDatabaseExist; if (!isDatabaseExist && options.MustThrowExceptionIfDatabaseDontExist) { throw new DatabaseNotFoundException("IdentityServer4 Database doesn't exist. Ensure it was created before.'"); } }
public static IJpProjectConfigurationBuilder AddJpAdminContext(this IJpProjectConfigurationBuilder services, Action <DbContextOptionsBuilder> optionsAction, JpDatabaseOptions options = null) { if (options == null) { options = new JpDatabaseOptions(); } RegisterStorageServices(services.Services); services.Services.TryAddScoped <IUnitOfWork, UnitOfWork>(); services.Services.AddDbContext <JpProjectAdminUiContext>(optionsAction); services.Services.AddScoped <IJpEntityFrameworkStore>(x => x.GetService <JpProjectAdminUiContext>()); services.Services.AddScoped <IConfigurationDbContext>(x => x.GetService <JpProjectAdminUiContext>()); services.Services.AddScoped <IPersistedGrantDbContext>(x => x.GetService <JpProjectAdminUiContext>()); services.SetupDefaultIdentityServerContext <JpProjectAdminUiContext>(); return(services); }
public static async Task CheckDatabases(IServiceProvider serviceProvider, JpDatabaseOptions options) { using var scope = serviceProvider.GetRequiredService <IServiceScopeFactory>().CreateScope(); var id4Context = scope.ServiceProvider.GetRequiredService <JPProjectAdminUIContext>(); var storeDb = scope.ServiceProvider.GetRequiredService <EventStoreContext>(); if (id4Context.Database.IsInMemory() || storeDb.Database.IsInMemory()) { return; } await DbHealthChecker.TestConnection(id4Context); await ValidateIs4Context(options, id4Context); await ConfigureEventStoreContext(storeDb); }
public static IJpProjectAdminBuilder WithSqlServer(this IJpProjectAdminBuilder services, Action <DbContextOptionsBuilder> optionsAction, JpDatabaseOptions options = null) { services.Services.AddAdminContext(optionsAction, options); return(services); }
public static IJpProjectAdminBuilder WithSqlServer(this IJpProjectAdminBuilder services, string connectionString, JpDatabaseOptions options = null) { var migrationsAssembly = typeof(DatabaseConfig).GetTypeInfo().Assembly.GetName().Name; services.Services.AddEntityFrameworkSqlServer().AddAdminContext(opt => opt.UseSqlServer(connectionString, sql => sql.MigrationsAssembly(migrationsAssembly)), options); return(services); }