Пример #1
0
        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}");
                    }
                }
            });
        }
Пример #2
0
        /// <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);
            }
        }