项目

单层解决方案:多租户架构

本文档提及的部分功能可能未包含在免费版本中。我们使用 * 符号标注仅在 团队版高级版 许可中提供的功能。

多租户是一种软件架构模式,其中单个软件实例(代码库)在服务器上运行,同时为多个租户提供服务。各租户之间相互隔离,可拥有独立的数据、配置和用户。本文档将阐述单层解决方案模板中的多租户运行机制。您可通过阅读多租户架构租户管理模块软件即服务模块 *文档深入了解该功能。

单层解决方案中的多租户实现

单层解决方案模板仅在创建时勾选*启用多租户功能 ******选项后才会采用多租户架构。

SaaS模块选择界面

您可以为每个租户配置独立数据库,也可让部分租户共享数据库。在*软件即服务模块 *****中,可通过连接字符串管理界面指定数据库连接字符串。所有缓存数据均按租户隔离存储,每个事件、后台任务及其他数据都会附带租户标识进行存储。

在应用程序中可通过ICurrentTenant服务获取当前租户信息:

public class MyService : ITransientDependency
{
    private readonly ICurrentTenant _currentTenant;

    public MyService(ICurrentTenant currentTenant)
    {
        _currentTenant = currentTenant;
    }

    public void MyMethod()
    {
        var tenantId = _currentTenant.Id;
        var tenantName = _currentTenant.Name;
    }
}

此外,您还可以利用数据过滤器系统临时禁用租户过滤器,以查询同一数据库中的所有数据:

public class MyBookService : ITransientDependency
{
    private readonly IDataFilter<IMultiTenant> _multiTenantFilter;
    private readonly IRepository<Book, Guid> _bookRepository;

    public MyBookService(
        IDataFilter<IMultiTenant> multiTenantFilter,
        IRepository<Book, Guid> bookRepository)
    {
        _multiTenantFilter = multiTenantFilter;
        _bookRepository = bookRepository;
    }

    public async Task<List<Book>> GetAllBooksIncludingDeletedAsync()
    {
        //临时禁用IMultiTenant过滤器
        using (_multiTenantFilter.Disable())
        {
            return await _bookRepository.GetListAsync();
        }
    }
}
在本文档中