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; })); }
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); }