Exemplo n.º 1
0
        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);
        }
Exemplo n.º 6
0
        public static IJpProjectAdminBuilder WithSqlServer(this IJpProjectAdminBuilder services, Action <DbContextOptionsBuilder> optionsAction, JpDatabaseOptions options = null)
        {
            services.Services.AddAdminContext(optionsAction, options);

            return(services);
        }
Exemplo n.º 7
0
        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);
        }