private string GetDbConnString() { return(_connectionStringResolver.GetNameOrConnectionString(new DbPerTenantConnectionStringResolveArgs(AbpSession.TenantId))); }
public void Run(bool skipConnVerification) { var hostConnStr = _connectionStringResolver.GetNameOrConnectionString(new ConnectionStringResolveArgs(MultiTenancySides.Host)); if (hostConnStr.IsNullOrWhiteSpace()) { Log.Write("Configuration file should contain a connection string named 'Default'"); return; } Log.Write("Host database: " + ConnectionStringHelper.GetConnectionString(hostConnStr)); if (!skipConnVerification) { Log.Write("Continue to migration for this host database and all tenants..? (Y/N): "); var command = Console.ReadLine(); if (!command.IsIn("Y", "y")) { Log.Write("Migration canceled."); return; } } Log.Write("HOST database migration started..."); try { _migrator.CreateOrMigrateForHost(SeedHelper.SeedHostDb); } catch (Exception ex) { Log.Write("An error occured during migration of host database:"); Log.Write(ex.ToString()); Log.Write("Canceled migrations."); return; } Log.Write("HOST database migration completed."); Log.Write("--------------------------------------------------------"); var migratedDatabases = new HashSet <string>(); var tenants = _tenantRepository.GetAllList(t => t.ConnectionString != null && t.ConnectionString != ""); for (int i = 0; i < tenants.Count; i++) { var tenant = tenants[i]; Log.Write(string.Format("Tenant database migration started... ({0} / {1})", (i + 1), tenants.Count)); Log.Write("Name : " + tenant.Name); Log.Write("TenancyName : " + tenant.TenancyName); Log.Write("Tenant Id : " + tenant.Id); Log.Write("Connection string : " + SimpleStringCipher.Instance.Decrypt(tenant.ConnectionString)); if (!migratedDatabases.Contains(tenant.ConnectionString)) { try { _migrator.CreateOrMigrateForTenant(tenant); } catch (Exception ex) { Log.Write("An error occured during migration of tenant database:"); Log.Write(ex.ToString()); Log.Write("Skipped this tenant and will continue for others..."); } migratedDatabases.Add(tenant.ConnectionString); } else { Log.Write("This database has already migrated before (you have more than one tenant in same database). Skipping it...."); } Log.Write(string.Format("Tenant database migration completed. ({0} / {1})", (i + 1), tenants.Count)); Log.Write("--------------------------------------------------------"); } Log.Write("All databases have been migrated."); }
public bool Run(bool skipConnVerification) { var hostConnStr = CensorConnectionString(_connectionStringResolver.GetNameOrConnectionString(new ConnectionStringResolveArgs(MultiTenancySides.Host))); Console.WriteLine(hostConnStr); if (hostConnStr.IsNullOrWhiteSpace()) { _log.Write("配置文件包含一个默认名称为“Default”的连接字符串"); return(false); } _log.Write("主机数据库的连接字符串: " + ConnectionStringHelper.GetConnectionString(hostConnStr)); if (!skipConnVerification) { _log.Write("是否继续迁移此主机数据库及所有租户数据。同意输入Y键,取消输入N键): "); var command = Console.ReadLine(); if (!command.IsIn("Y", "y")) { _log.Write("迁移数据取消。"); return(false); } } _log.Write("开始为主机数据库迁移数据..."); try { _migrator.CreateOrMigrateForHost(SeedHelper.SeedHostDb); } catch (Exception ex) { _log.Write("迁移主机数据库时发生一个内部错误:"); _log.Write(ex.ToString()); _log.Write("取消迁移数据。"); throw new Exception("迁移执行失败"); } _log.Write("主机数据库迁移完成。"); _log.Write("--------------------------------------------------------"); var migratedDatabases = new HashSet <string>(); var tenants = _tenantRepository.GetAllList(t => t.ConnectionString != null && t.ConnectionString != ""); for (var i = 0; i < tenants.Count; i++) { var tenant = tenants[i]; _log.Write($"开始为租户数据库迁移数据,迁移状态:当前租户{i + 1} /总租户数量{tenants.Count}... "); _log.Write("租户简称 : " + tenant.Name); _log.Write("租户名称 : " + tenant.TenancyName); _log.Write("租户 Id : " + tenant.Id); _log.Write("连接字符串信息 : " + SimpleStringCipher.Instance.Decrypt(tenant.ConnectionString)); if (!migratedDatabases.Contains(tenant.ConnectionString)) { try { _migrator.CreateOrMigrateForTenant(tenant); } catch (Exception ex) { _log.Write("迁移租户数据库过程中出错:"); _log.Write(ex.ToString()); _log.Write("跳过此租户, 并将继续为其他租户迁移数据..."); } migratedDatabases.Add(tenant.ConnectionString); } else { _log.Write("此数据库以前已经迁移过 (同一数据库中有多个租户)。跳过它..。"); } _log.Write(string.Format("租户数据库迁移已完成. ({0} / {1})", (i + 1), tenants.Count)); _log.Write("--------------------------------------------------------"); } _log.Write("所有数据库都已迁移。"); return(true); }