|
|
|
@ -24,7 +24,7 @@ public class MultiTenantConnectionStringResolver : DefaultConnectionStringResolv |
|
|
|
_serviceProvider = serviceProvider; |
|
|
|
} |
|
|
|
|
|
|
|
public override async Task<string> ResolveAsync(string connectionStringName = null) |
|
|
|
public override async Task<string> ResolveAsync(string? connectionStringName = null) |
|
|
|
{ |
|
|
|
if (_currentTenant.Id == null) |
|
|
|
{ |
|
|
|
@ -40,7 +40,7 @@ public class MultiTenantConnectionStringResolver : DefaultConnectionStringResolv |
|
|
|
return await base.ResolveAsync(connectionStringName); |
|
|
|
} |
|
|
|
|
|
|
|
var tenantDefaultConnectionString = tenant.ConnectionStrings.Default; |
|
|
|
var tenantDefaultConnectionString = tenant.ConnectionStrings?.Default; |
|
|
|
|
|
|
|
//Requesting default connection string...
|
|
|
|
if (connectionStringName == null || |
|
|
|
@ -48,41 +48,41 @@ public class MultiTenantConnectionStringResolver : DefaultConnectionStringResolv |
|
|
|
{ |
|
|
|
//Return tenant's default or global default
|
|
|
|
return !tenantDefaultConnectionString.IsNullOrWhiteSpace() |
|
|
|
? tenantDefaultConnectionString |
|
|
|
: Options.ConnectionStrings.Default; |
|
|
|
? tenantDefaultConnectionString! |
|
|
|
: Options.ConnectionStrings.Default!; |
|
|
|
} |
|
|
|
|
|
|
|
//Requesting specific connection string...
|
|
|
|
var connString = tenant.ConnectionStrings.GetOrDefault(connectionStringName); |
|
|
|
var connString = tenant.ConnectionStrings?.GetOrDefault(connectionStringName); |
|
|
|
if (!connString.IsNullOrWhiteSpace()) |
|
|
|
{ |
|
|
|
//Found for the tenant
|
|
|
|
return connString; |
|
|
|
return connString!; |
|
|
|
} |
|
|
|
|
|
|
|
//Fallback to the mapped database for the specific connection string
|
|
|
|
var database = Options.Databases.GetMappedDatabaseOrNull(connectionStringName); |
|
|
|
if (database != null && database.IsUsedByTenants) |
|
|
|
{ |
|
|
|
connString = tenant.ConnectionStrings.GetOrDefault(database.DatabaseName); |
|
|
|
connString = tenant.ConnectionStrings?.GetOrDefault(database.DatabaseName); |
|
|
|
if (!connString.IsNullOrWhiteSpace()) |
|
|
|
{ |
|
|
|
//Found for the tenant
|
|
|
|
return connString; |
|
|
|
return connString!; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//Fallback to tenant's default connection string if available
|
|
|
|
if (!tenantDefaultConnectionString.IsNullOrWhiteSpace()) |
|
|
|
{ |
|
|
|
return tenantDefaultConnectionString; |
|
|
|
return tenantDefaultConnectionString!; |
|
|
|
} |
|
|
|
|
|
|
|
return await base.ResolveAsync(connectionStringName); |
|
|
|
} |
|
|
|
|
|
|
|
[Obsolete("Use ResolveAsync method.")] |
|
|
|
public override string Resolve(string connectionStringName = null) |
|
|
|
public override string Resolve(string? connectionStringName = null) |
|
|
|
{ |
|
|
|
if (_currentTenant.Id == null) |
|
|
|
{ |
|
|
|
@ -98,7 +98,7 @@ public class MultiTenantConnectionStringResolver : DefaultConnectionStringResolv |
|
|
|
return base.Resolve(connectionStringName); |
|
|
|
} |
|
|
|
|
|
|
|
var tenantDefaultConnectionString = tenant.ConnectionStrings.Default; |
|
|
|
var tenantDefaultConnectionString = tenant.ConnectionStrings?.Default; |
|
|
|
|
|
|
|
//Requesting default connection string...
|
|
|
|
if (connectionStringName == null || |
|
|
|
@ -106,42 +106,42 @@ public class MultiTenantConnectionStringResolver : DefaultConnectionStringResolv |
|
|
|
{ |
|
|
|
//Return tenant's default or global default
|
|
|
|
return !tenantDefaultConnectionString.IsNullOrWhiteSpace() |
|
|
|
? tenantDefaultConnectionString |
|
|
|
: Options.ConnectionStrings.Default; |
|
|
|
? tenantDefaultConnectionString! |
|
|
|
: Options.ConnectionStrings.Default!; |
|
|
|
} |
|
|
|
|
|
|
|
//Requesting specific connection string...
|
|
|
|
var connString = tenant.ConnectionStrings.GetOrDefault(connectionStringName); |
|
|
|
var connString = tenant.ConnectionStrings?.GetOrDefault(connectionStringName); |
|
|
|
if (!connString.IsNullOrWhiteSpace()) |
|
|
|
{ |
|
|
|
//Found for the tenant
|
|
|
|
return connString; |
|
|
|
return connString!; |
|
|
|
} |
|
|
|
|
|
|
|
//Fallback to tenant's default connection string if available
|
|
|
|
if (!tenantDefaultConnectionString.IsNullOrWhiteSpace()) |
|
|
|
{ |
|
|
|
return tenantDefaultConnectionString; |
|
|
|
return tenantDefaultConnectionString!; |
|
|
|
} |
|
|
|
|
|
|
|
//Try to find the specific connection string for given name
|
|
|
|
var connStringInOptions = Options.ConnectionStrings.GetOrDefault(connectionStringName); |
|
|
|
if (!connStringInOptions.IsNullOrWhiteSpace()) |
|
|
|
{ |
|
|
|
return connStringInOptions; |
|
|
|
return connStringInOptions!; |
|
|
|
} |
|
|
|
|
|
|
|
//Fallback to the global default connection string
|
|
|
|
var defaultConnectionString = Options.ConnectionStrings.Default; |
|
|
|
if (!defaultConnectionString.IsNullOrWhiteSpace()) |
|
|
|
{ |
|
|
|
return defaultConnectionString; |
|
|
|
return defaultConnectionString!; |
|
|
|
} |
|
|
|
|
|
|
|
throw new AbpException("No connection string defined!"); |
|
|
|
} |
|
|
|
|
|
|
|
protected virtual async Task<TenantConfiguration> FindTenantConfigurationAsync(Guid tenantId) |
|
|
|
protected virtual async Task<TenantConfiguration?> FindTenantConfigurationAsync(Guid tenantId) |
|
|
|
{ |
|
|
|
using (var serviceScope = _serviceProvider.CreateScope()) |
|
|
|
{ |
|
|
|
@ -154,7 +154,7 @@ public class MultiTenantConnectionStringResolver : DefaultConnectionStringResolv |
|
|
|
} |
|
|
|
|
|
|
|
[Obsolete("Use FindTenantConfigurationAsync method.")] |
|
|
|
protected virtual TenantConfiguration FindTenantConfiguration(Guid tenantId) |
|
|
|
protected virtual TenantConfiguration? FindTenantConfiguration(Guid tenantId) |
|
|
|
{ |
|
|
|
using (var serviceScope = _serviceProvider.CreateScope()) |
|
|
|
{ |
|
|
|
|