private static async void CreateAndMigrateDatabases(IHost host) { using (var scope = host.Services.CreateScope()) { var tenantService = scope.ServiceProvider.GetService <TenantService>(); var tenants = await tenantService.GetAllTenantsAsync(); foreach (var tenant in tenants) { try { Console.WriteLine($"checking db for {tenant.Id} : {tenant.Name}"); var optionsBuilder = new DbContextOptionsBuilder <TenantDataContext>(); optionsBuilder.UseMySql(tenant.ConnectionString()); var dbContext = new TenantDataContext(optionsBuilder.Options); TenantDataContextSeed.SeedAsync(dbContext, new CreateTenant() { UserId = Guid.Parse("08d84f75-8698-4cf5-82a3-094415fcd132"), Tenant = tenant }).Wait(); } catch (Exception exception) { Console.WriteLine(exception); } } } }
public async Task <TenantConfig> CreateTenantAsync(CreateTenant createTenant) { var tenant = new TenantConfig() { Name = createTenant.Tenant.Name, DbName = $"warehousedb{createTenant.Tenant.Name}", DbServer = "localhost", DbUser = "******", DbPassword = "******", Accent = createTenant.Tenant.Accent, Avatar = createTenant.Tenant.Avatar, Description = createTenant.Tenant.Description }; if ((await _multiTenantContext.TenantConfigs.FirstOrDefaultAsync(x => x.Name == tenant.Name)) != null) { return(null); } await _multiTenantContext.TenantConfigs.AddAsync(tenant); var employment = new Employment() { TenantId = tenant.Id, UserId = createTenant.UserId }; await _multiTenantContext.Employments.AddAsync(employment); try { await _multiTenantContext.SaveChangesAsync(); var optionsBuilder = new DbContextOptionsBuilder <TenantDataContext>(); optionsBuilder.UseMySql(tenant.ConnectionString()); var dbContext = new TenantDataContext(optionsBuilder.Options); await TenantDataContextSeed.SeedAsync(dbContext, createTenant); return(tenant); } catch { return(null); } }