示例#1
0
        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);
            }
        }