# 租户数据隔离
与动态动态分库的区别:所有租户都使用的相同的数据与表,使用租户 id 进行数据隔离
内部实现逻辑:通过租户 id 字段自动过滤与写入区分
1. 后台appsettings.json将UseDynamicShareDB值改为0
2. TenancyField属性填表的字段名,需要存租户数据的表都要加上字段,类型并且是varchar类型,长度100
3. 后台管理:系统设置->集团租户->租户管理;创建租户,数据库连接信息不用配置,代码生成器可以将其他不要的字段隐藏
4. 角色分配租户信息、用户分角色(一个用户有可以多个租户,右上角任意切换租户信息)
1
2
3
4
2
3
4
# 自定义查询租户过滤
//过滤只显示当前租户的数据
var query = repository.FindAsIQueryable((x) => 条件).FilterTenancy();
1
2
2
# 忽略指定表租户过滤
表有租户字段又不需要租户过滤或者按条件判断要不是忽略
表的service类实现
public partial class SellOrderService
{
private IHttpContextAccessor _httpContextAccessor;
private ISellOrderRepository _repository;
[ActivatorUtilitiesConstructor]
public SellOrderService(IHttpContextAccessor httpContextAccessor, ISellOrderRepository repository)
: base(repository)
{
_httpContextAccessor = httpContextAccessor;
_repository = repository;
//禁用租户过滤
IsMultiTenancy = false;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17