fix: tenants 列表查询避免 DbContext 并发

This commit is contained in:
2025-12-14 16:41:34 +08:00
parent c5a3243bd8
commit 4b63c1913c

View File

@@ -35,16 +35,14 @@ public sealed class SearchTenantsQueryHandler(ITenantRepository tenantRepository
// 3. (空行后) 批量查询订阅与实名资料(避免 N+1 // 3. (空行后) 批量查询订阅与实名资料(避免 N+1
var tenantIds = tenants.Select(x => x.Id).ToArray(); var tenantIds = tenants.Select(x => x.Id).ToArray();
var subscriptionsTask = tenantRepository.GetSubscriptionsAsync(tenantIds, cancellationToken); var subscriptions = await tenantRepository.GetSubscriptionsAsync(tenantIds, cancellationToken);
var verificationsTask = tenantRepository.GetVerificationProfilesAsync(tenantIds, cancellationToken); var verifications = await tenantRepository.GetVerificationProfilesAsync(tenantIds, cancellationToken);
await Task.WhenAll(subscriptionsTask, verificationsTask);
// 4. (空行后) 构建订阅与实名资料映射 // 4. (空行后) 构建订阅与实名资料映射
var subscriptionByTenantId = (await subscriptionsTask) var subscriptionByTenantId = subscriptions
.GroupBy(x => x.TenantId) .GroupBy(x => x.TenantId)
.ToDictionary(x => x.Key, x => x.FirstOrDefault()); .ToDictionary(x => x.Key, x => x.FirstOrDefault());
var verificationByTenantId = (await verificationsTask) var verificationByTenantId = verifications.ToDictionary(x => x.TenantId);
.ToDictionary(x => x.TenantId);
// 5. (空行后) 映射 DTO带订阅与认证 // 5. (空行后) 映射 DTO带订阅与认证
var result = new List<TenantDto>(tenants.Count); var result = new List<TenantDto>(tenants.Count);