@iEricLee Creation time : 2023-06-02 18:33:06 Last Modification Time : 2023-06-02 18:33:06
来自 ABP Framework 研习社 @镜鉴/yl*惊境
@大风
的提问:
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 中提供 IMustHaveTenant
和 IMayHaveTenent
两个接口,实现多租户实体。该版本中存在一个设计问题:如果想创建一个非多租户应用程序,必须在数据库中创建一个以 1
为 Id
的默认租户,这个默认租户被用作单个租户。
在 ABP Framework 中修正该设计问题,实现多租户实体只需一个接口:IMultiTenant
,定义类型为 Guid?
的 TenantId
属性。如果应用程序不是多租户,那么实体 TenantId
属性值为 null
,而不是创建一个默认租户代替。