diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ConfigurationStore/DefaultTenantStore.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ConfigurationStore/DefaultTenantStore.cs index 3e6ea4167a..edecf22b65 100644 --- a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ConfigurationStore/DefaultTenantStore.cs +++ b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ConfigurationStore/DefaultTenantStore.cs @@ -18,12 +18,22 @@ namespace Volo.Abp.MultiTenancy.ConfigurationStore public Task FindAsync(string name) { - return Task.FromResult(_options.Tenants?.FirstOrDefault(t => t.Name == name)); + return Task.FromResult(Find(name)); } public Task FindAsync(Guid id) { - return Task.FromResult(_options.Tenants?.FirstOrDefault(t => t.Id == id)); + return Task.FromResult(Find(id)); + } + + public TenantConfiguration Find(string name) + { + return _options.Tenants?.FirstOrDefault(t => t.Name == name); + } + + public TenantConfiguration Find(Guid id) + { + return _options.Tenants?.FirstOrDefault(t => t.Id == id); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ITenantStore.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ITenantStore.cs index b1c8f97f1a..7125a97405 100644 --- a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ITenantStore.cs +++ b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ITenantStore.cs @@ -8,5 +8,9 @@ namespace Volo.Abp.MultiTenancy Task FindAsync(string name); Task FindAsync(Guid id); + + TenantConfiguration Find(string name); + + TenantConfiguration Find(Guid id); } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs index af5674a9b4..fe061d0b8d 100644 --- a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs +++ b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs @@ -4,7 +4,6 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Volo.Abp.Data; using Volo.Abp.DependencyInjection; -using Volo.Abp.Threading; namespace Volo.Abp.MultiTenancy { @@ -38,7 +37,7 @@ namespace Volo.Abp.MultiTenancy .ServiceProvider .GetRequiredService(); - var tenant = AsyncHelper.RunSync(() => tenantStore.FindAsync(_currentTenant.Id.Value)); //TODO: Can we avoid from RunSync? + var tenant = tenantStore.Find(_currentTenant.Id.Value); if (tenant?.ConnectionStrings == null) { diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/ITenantRepository.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/ITenantRepository.cs index 7b1c7e15f1..59f9aedc85 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/ITenantRepository.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/ITenantRepository.cs @@ -13,6 +13,11 @@ namespace Volo.Abp.TenantManagement bool includeDetails = true, CancellationToken cancellationToken = default); + Tenant FindByName( + string name, + bool includeDetails = true + ); + Task> GetListAsync( string sorting = null, int maxResultCount = int.MaxValue, diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/TenantStore.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/TenantStore.cs index 1a32c4a64d..1cd1c60c0a 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/TenantStore.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/TenantStore.cs @@ -51,5 +51,33 @@ namespace Volo.Abp.TenantManagement return _objectMapper.Map(tenant); } } + + public TenantConfiguration Find(string name) + { + using (_currentTenant.Change(null)) //TODO: No need this if we can implement to define host side (or tenant-independent) entities! + { + var tenant = _tenantRepository.FindByName(name); + if (tenant == null) + { + return null; + } + + return _objectMapper.Map(tenant); + } + } + + public TenantConfiguration Find(Guid id) + { + using (_currentTenant.Change(null)) //TODO: No need this if we can implement to define host side (or tenant-independent) entities! + { + var tenant = _tenantRepository.Find(id); + if (tenant == null) + { + return null; + } + + return _objectMapper.Map(tenant); + } + } } } diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs index d2859f29a1..c1d9a3c556 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs @@ -25,7 +25,14 @@ namespace Volo.Abp.TenantManagement.EntityFrameworkCore { return await DbSet .IncludeDetails(includeDetails) - .FirstOrDefaultAsync(t => t.Name == name, cancellationToken); + .FirstOrDefaultAsync(t => t.Name == name, GetCancellationToken(cancellationToken)); + } + + public Tenant FindByName(string name, bool includeDetails = true) + { + return DbSet + .IncludeDetails(includeDetails) + .FirstOrDefault(t => t.Name == name); } public virtual async Task> GetListAsync( @@ -45,7 +52,7 @@ namespace Volo.Abp.TenantManagement.EntityFrameworkCore ) .OrderBy(sorting ?? nameof(Tenant.Name)) .PageBy(skipCount, maxResultCount) - .ToListAsync(cancellationToken); + .ToListAsync(GetCancellationToken(cancellationToken)); } public override IQueryable WithDetails() diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo/Abp/TenantManagement/MongoDb/MongoTenantRepository.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo/Abp/TenantManagement/MongoDb/MongoTenantRepository.cs index 0ee8c54744..aba3385cfd 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo/Abp/TenantManagement/MongoDb/MongoTenantRepository.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo/Abp/TenantManagement/MongoDb/MongoTenantRepository.cs @@ -25,7 +25,13 @@ namespace Volo.Abp.TenantManagement.MongoDB CancellationToken cancellationToken = default) { return await GetMongoQueryable() - .FirstOrDefaultAsync(t => t.Name == name, cancellationToken); + .FirstOrDefaultAsync(t => t.Name == name, GetCancellationToken(cancellationToken)); + } + + public Tenant FindByName(string name, bool includeDetails = true) + { + return GetMongoQueryable() + .FirstOrDefault(t => t.Name == name); } public virtual async Task> GetListAsync( @@ -45,7 +51,7 @@ namespace Volo.Abp.TenantManagement.MongoDB .OrderBy(sorting ?? nameof(Tenant.Name)) .As>() .PageBy>(skipCount, maxResultCount) - .ToListAsync(cancellationToken); + .ToListAsync(GetCancellationToken(cancellationToken)); } } } \ No newline at end of file