| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- using System;
- using System.Collections.Generic;
- using System.Configuration;
- using Abp.Dependency;
- using Abp.Domain.Repositories;
- using Abp.Domain.Uow;
- using Abp.Extensions;
- using Abp.MultiTenancy;
- using Abp.Runtime.Security;
- using WePlatform.MultiTenancy;
- using IwbZero.MultiTenancy;
- namespace WePlatform
- {
- public class MultiTenantMigrateExecuter : ITransientDependency
- {
- public Log Log { get; private set; }
- private readonly IIwbDbMigrator _migrator;
- private readonly IRepository<Tenant> _tenantRepository;
- private readonly IDbPerTenantConnectionStringResolver _connectionStringResolver;
- public MultiTenantMigrateExecuter(
- IIwbDbMigrator migrator,
- IRepository<Tenant> tenantRepository,
- Log log,
- IDbPerTenantConnectionStringResolver connectionStringResolver)
- {
- Log = log;
- _connectionStringResolver = connectionStringResolver;
- _migrator = migrator;
- _tenantRepository = tenantRepository;
- }
- 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: " + 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();
- }
- 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($"Tenant database migration started... ({(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($"Tenant database migration completed. ({(i + 1)} / {tenants.Count})");
- Log.Write("--------------------------------------------------------");
- }
- Log.Write("All databases have been migrated.");
- Console.ReadLine();
- }
- }
- }
|