private static Task SeedBiblioAsync(IServiceProvider serviceProvider)
        {
            return(Policy.Handle <DbException>()
                   .WaitAndRetry(new[]
            {
                TimeSpan.FromSeconds(10),
                TimeSpan.FromSeconds(30),
                TimeSpan.FromSeconds(60)
            }, (exception, timeSpan, _) =>
            {
                ILogger logger = serviceProvider
                                 .GetService <ILoggerFactory>()
                                 .CreateLogger(typeof(BiblioHostSeedExtensions));

                string message = "Unable to connect to DB" +
                                 $" (sleep {timeSpan}): {exception.Message}";
                Console.WriteLine(message);
                logger.LogError(exception, message);
            }).Execute(() =>
            {
                IConfiguration config =
                    serviceProvider.GetService <IConfiguration>();

                ILogger logger = serviceProvider
                                 .GetService <ILoggerFactory>()
                                 .CreateLogger(typeof(BiblioHostSeedExtensions));

                Console.WriteLine("Seeding database...");
                IBiblioRepository repository =
                    serviceProvider.GetService <IBiblioRepository>();

                BiblioSeeder seeder = new BiblioSeeder(repository)
                {
                    Logger = logger
                };
                seeder.Seed(config.GetValue <int>("Seed:EntityCount"));

                Console.WriteLine("Seeding completed");
                return Task.CompletedTask;
            }));
        }
示例#2
0
        public Task Run()
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine("SEED DATABASE\n");
            Console.ResetColor();
            Console.WriteLine(
                $"Input: {_database}\n" +
                $"Count: {_count}\n" +
                $"Entities: {_entities ?? "all"}");

            // create database if not exists
            string connection = string.Format(CultureInfo.InvariantCulture,
                                              _config.GetConnectionString("Default"),
                                              _database);

            MySqlDbManager manager = new MySqlDbManager(connection);

            if (!manager.Exists(_database))
            {
                Console.WriteLine("Creating database...");
                Serilog.Log.Information($"Creating database {_database}...");

                manager.CreateDatabase(_database, EfHelper.GetSchema(), null);

                Console.WriteLine("Database created.");
                Serilog.Log.Information("Database created.");
            }

            Console.Write("Seeding...");
            IBiblioRepository repository =
                new EfBiblioRepository(connection, "mysql");
            BiblioSeeder seeder = new BiblioSeeder(repository);

            seeder.Seed(_count, _entities);

            Console.WriteLine(" completed");

            return(Task.CompletedTask);
        }