分层解决方案:多租户架构
多租户是一种软件架构,其中软件的单个实例(代码库)在服务器上运行并为多个租户提供服务。租户之间相互隔离,可以拥有自己的数据、配置和用户。本文档解释了分层解决方案模板中多租户机制的工作原理。您可以在 多租户、租户管理 和 SaaS * 文档中了解更多关于多租户的信息。
分层解决方案中的多租户功能
分层解决方案模板仅在创建解决方案时选择了 启用多租户 * 选项后才会采用 多租户 架构。
您可以为每个租户使用不同的数据库,也可以为部分租户共享一个数据库。在 *SaaS * 模块中,您可以在 连接字符串管理界面 中指定数据库连接字符串。所有缓存数据均按租户隔离。每个事件、后台作业及其他数据都随租户ID存储。
您可以在应用程序中使用 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();
}
}
}
抠丁客



