以下是获取租户的方法(从主机端)
public class GetTenantsInput : PagedAndSortedResultRequestDto
{
public string Filter { get; set; }
}
public class SaasTenantDto : ExtensibleEntityDto<Guid>
{
public string Name { get; set; }
}
public class EfCoreTenantRepository : EfCoreRepository<ISaasDbContext, Tenant, Guid>, ITenantRepository
{
public EfCoreTenantRepository(IDbContextProvider<ISaasDbContext> dbContextProvider)
: base(dbContextProvider)
{
}
public virtual async Task<List<Tenant>> GetListAsync(
string sorting = null,
int maxResultCount = int.MaxValue,
int skipCount = 0,
string filter = null,
bool includeDetails = false,
CancellationToken cancellationToken = default)
{
return await (await GetDbSetAsync())
.IncludeDetails(includeDetails)
.WhereIf(
!filter.IsNullOrWhiteSpace(),
u =>
u.Name.Contains(filter)
)
.OrderBy(sorting ?? nameof(Tenant.Name))
.PageBy(skipCount, maxResultCount)
.ToListAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task<long> GetCountAsync(string filter = null, CancellationToken cancellationToken = default)
{
return await this
.WhereIf(
!filter.IsNullOrWhiteSpace(),
u =>
u.Name.Contains(filter)
).CountAsync(cancellationToken: cancellationToken);
}
[Obsolete("Use WithDetailsAsync method.")]
public override IQueryable<Tenant> WithDetails()
{
return GetQueryable().IncludeDetails();
}
public override async Task<IQueryable<Tenant>> WithDetailsAsync()
{
return (await GetQueryableAsync()).IncludeDetails();
}
}
public virtual async Task<PagedResultDto<SaasTenantDto>> GetListAsync(GetTenantsInput input)
{
var count = await TenantRepository.GetCountAsync(input.Filter);
var list = await TenantRepository.GetListAsync(
input.Sorting,
input.MaxResultCount,
input.SkipCount,
input.Filter
);
var tenantDtos = ObjectMapper.Map<List<Tenant>, List<SaasTenantDto>>(list);
return new PagedResultDto<SaasTenantDto>(
count,
tenantDtos
);
}