protected override void ConfigureWebHost(IWebHostBuilder builder) { builder = builder ?? throw new ArgumentNullException(nameof(builder)); builder.UseEnvironment("Testing"); builder.ConfigureServices(services => { services.AddEntityFrameworkInMemoryDatabase(); var provider = services .AddEntityFrameworkInMemoryDatabase() .BuildServiceProvider(); services.AddDbContext <ApplicationContext>(options => { options.UseInMemoryDatabase("InMemoryDbForTesting"); options.UseInternalServiceProvider(provider); }); services.AddDbContext <ApplicationContext>(options => { options.UseInMemoryDatabase("Identity"); options.UseInternalServiceProvider(provider); }); var sp = services.BuildServiceProvider(); using (var scope = sp.CreateScope()) { var scopedServices = scope.ServiceProvider; var db = scopedServices.GetRequiredService <ApplicationContext>(); var loggerFactory = scopedServices.GetRequiredService <ILoggerFactory>(); var logger = scopedServices.GetRequiredService <ILogger <WebTestFixture> >(); db.Database.EnsureCreated(); try { var userManager = scopedServices.GetRequiredService <UserManager <ApplicationUser> >(); var roleManager = scopedServices.GetRequiredService <RoleManager <IdentityRole> >(); ApplicationContextSeed.IdentitySeedAsync(db, userManager, roleManager).Wait(); } catch (Exception ex) { logger.LogError(ex, $"An error occurred seeding the " + "database with test messages. Error: {ex.Message}"); } } }); }
/// <summary> /// Заполнить базу данных. /// </summary> /// <param name="serviceProvider">Провайдер сервисов.</param> public static void Initialize(IServiceProvider serviceProvider) { try { var contextOptions = serviceProvider.GetRequiredService <DbContextOptions <ApplicationContext> >(); var userManager = serviceProvider.GetRequiredService <UserManager <ApplicationUser> >(); var roleManager = serviceProvider.GetRequiredService <RoleManager <IdentityRole> >(); using var applicationContext = new ApplicationContext(contextOptions); ApplicationContextSeed.IdentitySeedAsync(applicationContext, userManager, roleManager).GetAwaiter().GetResult(); Log.Information(logInformationMessage); } catch (Exception ex) { Log.Error(ex, logErrorMessage); } }