protected override void ConfigureWebHost(IWebHostBuilder builder) { builder.ConfigureServices(async services => { // Create a new service provider. var serviceProvider = new ServiceCollection() .AddEntityFrameworkInMemoryDatabase() .BuildServiceProvider(); // Add a database context (AppDbContext) using an in-memory // database for testing. services.AddDbContext <PaymentDbContext>(options => { options.UseInMemoryDatabase("PaymentDb"); options.UseInternalServiceProvider(serviceProvider); }); //services.AddTransient<IPaymentRepository, PaymentRepository>(); services.AddTransient <IRepositoryWrapper, RepositoryWrapper>(); // Build the service provider. var sp = services.BuildServiceProvider(); // Create a scope to obtain a reference to the database // context (AppDbContext). using (var scope = sp.CreateScope()) { var scopedServices = scope.ServiceProvider; var context = scopedServices.GetRequiredService <PaymentDbContext>(); var logger = scopedServices .GetRequiredService <ILogger <ApiWebApplicationFactory <TStartup> > >(); // Ensure the database is created. //context.Database.EnsureCreated(); try { // Seed the database with test data. await DbContextSeed.SeedPaymentDataAsync(context); } catch (Exception ex) { logger.LogError(ex, "An error occurred seeding the " + $"database with test messages. Error: {ex.Message}"); } } }); }
public async static Task Main(string[] args) { // throttle the thread pool (set available threads to amount of processors) ThreadPool.SetMaxThreads(Environment.ProcessorCount, Environment.ProcessorCount); var host = CreateHostBuilder(args).Build(); using (var scope = host.Services.CreateScope()) { var services = scope.ServiceProvider; try { var appDbContext = services.GetRequiredService <PaymentDbContext>(); appDbContext.Database.EnsureDeleted(); appDbContext.Database.Migrate(); await DbContextSeed.SeedPaymentDataAsync(appDbContext); var userDbContext = services.GetRequiredService <UserDbContext>(); userDbContext.Database.EnsureDeleted(); userDbContext.Database.Migrate(); await DbContextSeed.SeedUserDataAsync(userDbContext); } catch (Exception ex) { var logger = scope.ServiceProvider.GetRequiredService <ILogger <Program> >(); logger.LogError(ex, "An error occurred while migrating the database."); throw; } } await host.RunAsync(); }