菜单栏

ABP Framework 研习社【问题-2303】租户接口和租户字段

@iEricLee Creation time : 2023-06-02 18:33:06 Last Modification Time : 2023-06-02 18:33:06

来自 ABP Framework 研习社 @镜鉴/yl*惊境 @大风 的提问:

must_have_tenant.jpg

cannot_find_tenantid.jpg

问题:在设计多租户实体时,为什么找不到 IMustHaveTenant 接口?

在 ABP Framework 确实没有提供 IMustHaveTenant 接口,猜想 @镜鉴/yl*惊境 使用的是 ASP.NET Boilerplate 或从老项目迁移过来的代码。

在 ABP Framework 中用于多租户实体的接口:IMultiTenant ,所以在迁移时,需要更改 TenantId 字段类型,并替换接口为 IMultiTant ,即可正常编译。

问题:为什么没有 TenantId 这个属性?

从给出的示例代码

builder.Entity<House>()
    .HasIndex(p => new { p.HouseId, p.TenantId })
    .IsUnique();

实体 House 是一个自定义实体,只需要为该实体实现 IMultiTenant 接口即可使用 TenantId 属性。

扩展:对多租户和非多租户实现的理解

实体实现多租户接口,成为多租户实体,最主要的作用是:根据当前租户对实体数据进行自动过滤

ASP.NET Boilerplate 中提供 IMustHaveTenantIMayHaveTenent 两个接口,实现多租户实体。该版本中存在一个设计问题:如果想创建一个非多租户应用程序,必须在数据库中创建一个以 1Id 的默认租户,这个默认租户被用作单个租户。

ABP Framework 中修正该设计问题,实现多租户实体只需一个接口:IMultiTenant,定义类型为 Guid?TenantId 属性。如果应用程序不是多租户,那么实体 TenantId 属性值为 null ,而不是创建一个默认租户代替。


In This Document
Copyright © 2024 知识乐 湘ICP备2022022129号-1