diff --git a/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Application.Contracts/LINGYUN/Abp/Saas/Tenants/Dto/TenantConnectionStringCreateOrUpdate.cs b/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Application.Contracts/LINGYUN/Abp/Saas/Tenants/Dto/TenantConnectionStringSetInput.cs
similarity index 87%
rename from aspnet-core/modules/saas/LINGYUN.Abp.Saas.Application.Contracts/LINGYUN/Abp/Saas/Tenants/Dto/TenantConnectionStringCreateOrUpdate.cs
rename to aspnet-core/modules/saas/LINGYUN.Abp.Saas.Application.Contracts/LINGYUN/Abp/Saas/Tenants/Dto/TenantConnectionStringSetInput.cs
index 39db85f8a..691867cd5 100644
--- a/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Application.Contracts/LINGYUN/Abp/Saas/Tenants/Dto/TenantConnectionStringCreateOrUpdate.cs
+++ b/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Application.Contracts/LINGYUN/Abp/Saas/Tenants/Dto/TenantConnectionStringSetInput.cs
@@ -1,15 +1,15 @@
-using System.ComponentModel.DataAnnotations;
-using Volo.Abp.Validation;
-
-namespace LINGYUN.Abp.Saas.Tenants;
-
-public class TenantConnectionStringCreateOrUpdate
-{
- [Required]
- [DynamicStringLength(typeof(TenantConnectionStringConsts), nameof(TenantConnectionStringConsts.MaxNameLength))]
- public string Name { get; set; }
-
- [Required]
- [DynamicStringLength(typeof(TenantConnectionStringConsts), nameof(TenantConnectionStringConsts.MaxValueLength))]
- public string Value { get; set; }
-}
+using System.ComponentModel.DataAnnotations;
+using Volo.Abp.Validation;
+
+namespace LINGYUN.Abp.Saas.Tenants;
+
+public class TenantConnectionStringSetInput
+{
+ [Required]
+ [DynamicStringLength(typeof(TenantConnectionStringConsts), nameof(TenantConnectionStringConsts.MaxNameLength))]
+ public string Name { get; set; }
+
+ [Required]
+ [DynamicStringLength(typeof(TenantConnectionStringConsts), nameof(TenantConnectionStringConsts.MaxValueLength))]
+ public string Value { get; set; }
+}
diff --git a/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Application.Contracts/LINGYUN/Abp/Saas/Tenants/Dto/TenantCreateDto.cs b/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Application.Contracts/LINGYUN/Abp/Saas/Tenants/Dto/TenantCreateDto.cs
index 7799a8181..ff7400f47 100644
--- a/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Application.Contracts/LINGYUN/Abp/Saas/Tenants/Dto/TenantCreateDto.cs
+++ b/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Application.Contracts/LINGYUN/Abp/Saas/Tenants/Dto/TenantCreateDto.cs
@@ -1,5 +1,11 @@
-using System.Collections.Generic;
+using LINGYUN.Abp.Saas.Localization;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Localization;
+using System;
+using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using Volo.Abp.Validation;
namespace LINGYUN.Abp.Saas.Tenants;
@@ -22,10 +28,31 @@ public class TenantCreateDto : TenantCreateOrUpdateBase
///
/// 默认数据库连接字符串
///
+ [DynamicStringLength(typeof(TenantConnectionStringConsts), nameof(TenantConnectionStringConsts.MaxValueLength))]
public string DefaultConnectionString { get; set; }
///
/// 其他数据库连接
///
- public Dictionary ConnectionStrings { get; set; } = new Dictionary();
+ public List ConnectionStrings { get; set; } = new List();
+
+ public override IEnumerable Validate(ValidationContext validationContext)
+ {
+ var validationResults = base.Validate(validationContext);
+
+ if (!UseSharedDatabase && DefaultConnectionString.IsNullOrWhiteSpace())
+ {
+ var saasResource = validationContext.GetRequiredService>();
+
+ var errors = new ValidationResult[1]
+ {
+ new ValidationResult(
+ saasResource["IfUseCustomDataBaseDefaultConnectionStringIsRequiredMessage"],
+ new string[1]{ nameof(DefaultConnectionString) })
+ };
+ return validationResults.Union(errors);
+ }
+
+ return validationResults;
+ }
}
\ No newline at end of file
diff --git a/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Application.Contracts/LINGYUN/Abp/Saas/Tenants/ITenantAppService.cs b/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Application.Contracts/LINGYUN/Abp/Saas/Tenants/ITenantAppService.cs
index de18fb821..db5a30ad1 100644
--- a/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Application.Contracts/LINGYUN/Abp/Saas/Tenants/ITenantAppService.cs
+++ b/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Application.Contracts/LINGYUN/Abp/Saas/Tenants/ITenantAppService.cs
@@ -26,7 +26,7 @@ public interface ITenantAppService :
Task SetConnectionStringAsync(
Guid id,
- TenantConnectionStringCreateOrUpdate input);
+ TenantConnectionStringSetInput input);
Task DeleteConnectionStringAsync(
Guid id,
diff --git a/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Application/LINGYUN/Abp/Saas/Tenants/TenantAppService.cs b/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Application/LINGYUN/Abp/Saas/Tenants/TenantAppService.cs
index b18b9cee6..682914293 100644
--- a/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Application/LINGYUN/Abp/Saas/Tenants/TenantAppService.cs
+++ b/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Application/LINGYUN/Abp/Saas/Tenants/TenantAppService.cs
@@ -83,18 +83,18 @@ public class TenantAppService : AbpSaasAppServiceBase, ITenantAppService
tenant.SetDisableTime(input.DisableTime);
input.MapExtraPropertiesTo(tenant);
- if (!input.UseSharedDatabase && !input.DefaultConnectionString.IsNullOrWhiteSpace())
+ if (!input.UseSharedDatabase)
{
await CheckConnectionString(input.DefaultConnectionString);
tenant.SetDefaultConnectionString(input.DefaultConnectionString);
- }
- if (input.ConnectionStrings.Any())
- {
- foreach (var connectionString in input.ConnectionStrings)
+ if (input.ConnectionStrings.Any())
{
- await CheckConnectionString(connectionString.Value, connectionString.Key);
- tenant.SetConnectionString(connectionString.Key, connectionString.Value);
+ foreach (var connectionString in input.ConnectionStrings)
+ {
+ await CheckConnectionString(connectionString.Value, connectionString.Name);
+ tenant.SetConnectionString(connectionString.Name, connectionString.Value);
+ }
}
}
@@ -213,7 +213,7 @@ public class TenantAppService : AbpSaasAppServiceBase, ITenantAppService
}
[Authorize(AbpSaasPermissions.Tenants.ManageConnectionStrings)]
- public async virtual Task SetConnectionStringAsync(Guid id, TenantConnectionStringCreateOrUpdate input)
+ public async virtual Task SetConnectionStringAsync(Guid id, TenantConnectionStringSetInput input)
{
await CheckConnectionString(input.Value, input.Name);
diff --git a/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain.Shared/LINGYUN/Abp/Saas/Localization/Resources/en.json b/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain.Shared/LINGYUN/Abp/Saas/Localization/Resources/en.json
index e6cc69449..d61e2638c 100644
--- a/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain.Shared/LINGYUN/Abp/Saas/Localization/Resources/en.json
+++ b/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain.Shared/LINGYUN/Abp/Saas/Localization/Resources/en.json
@@ -50,6 +50,7 @@
"Features:ExpiredRecoveryTimeDesc": "If the resource expiration is not handled for a long time, tenant resources will be reclaimed",
"UnActived": "UnActived",
"RecycleStrategy:Reserve": "Reserve",
- "RecycleStrategy:Recycle": "Recycle"
+ "RecycleStrategy:Recycle": "Recycle",
+ "IfUseCustomDataBaseDefaultConnectionStringIsRequiredMessage": "If you use a custom database, the default connection string must be required!"
}
}
\ No newline at end of file
diff --git a/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain.Shared/LINGYUN/Abp/Saas/Localization/Resources/zh-Hans.json b/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain.Shared/LINGYUN/Abp/Saas/Localization/Resources/zh-Hans.json
index 684aa2ec5..8bdfc083d 100644
--- a/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain.Shared/LINGYUN/Abp/Saas/Localization/Resources/zh-Hans.json
+++ b/aspnet-core/modules/saas/LINGYUN.Abp.Saas.Domain.Shared/LINGYUN/Abp/Saas/Localization/Resources/zh-Hans.json
@@ -50,6 +50,7 @@
"Features:ExpiredRecoveryTimeDesc": "当资源超期多久没有处理, 将回收租户资源",
"UnActived": "未启用",
"RecycleStrategy:Reserve": "保留",
- "RecycleStrategy:Recycle": "回收"
+ "RecycleStrategy:Recycle": "回收",
+ "IfUseCustomDataBaseDefaultConnectionStringIsRequiredMessage": "如果使用自定义数据库,默认连接字符串必须输入!"
}
}
\ No newline at end of file
diff --git a/aspnet-core/modules/saas/LINGYUN.Abp.Saas.EntityFrameworkCore/LINGYUN/Abp/Saas/EntityFrameworkCore/EfCoreTenantRepository.cs b/aspnet-core/modules/saas/LINGYUN.Abp.Saas.EntityFrameworkCore/LINGYUN/Abp/Saas/EntityFrameworkCore/EfCoreTenantRepository.cs
index 5e96affb5..0bbed3fd4 100644
--- a/aspnet-core/modules/saas/LINGYUN.Abp.Saas.EntityFrameworkCore/LINGYUN/Abp/Saas/EntityFrameworkCore/EfCoreTenantRepository.cs
+++ b/aspnet-core/modules/saas/LINGYUN.Abp.Saas.EntityFrameworkCore/LINGYUN/Abp/Saas/EntityFrameworkCore/EfCoreTenantRepository.cs
@@ -70,7 +70,7 @@ public class EfCoreTenantRepository : EfCoreRepository SetConnectionStringAsync(Guid id, TenantConnectionStringCreateOrUpdate input)
+ public virtual Task SetConnectionStringAsync(Guid id, TenantConnectionStringSetInput input)
{
return TenantAppService.SetConnectionStringAsync(id, input);
}