開啟多租戶##
ABP和Module-Zero可以運行多租戶或單租戶模式。多租戶默認是禁用的。我們可以在module類中的PreInitialize方法中開啟它,如下所示:
[DependsOn(typeof(AbpZeroCoreModule))]
public class MyCoreModule : AbpModule
{
public override void PreInitialize()
{
Configuration.MultiTenancy.IsEnabled = true;
}
...
}
要注意的是:即使我們的應用不是多租戶,我們也必須定義一個默認的租戶。
當我們基於ABP和Module-Zero創建了一個項目模板之后,我們就得到了Tenant實體和TenantManager領域服務。
租戶實體##
Tenant實體代表該應用的一個租戶。
public class Tenant : AbpTenant<Tenant, User>
{
}
Tenant實體派生自泛型的AbpTenant類。Tenant實體存儲在數據庫中的AbpTenants表中。你可以將自定義的屬性添加到Tenant類中。
AbpTenant類定義了一些基本的屬性,最重要的有這么幾個:
- TenancyName:這是一個租戶在應用中唯一的名字。正常情況下,不應該改變。可以使用它來分配一些租戶的子領域,如‘mytenant.mydomain.com’。TenancyNameRegex常量定義了該命名規則。
- Name:該租戶的一個隨意的,人類可讀的長名字。
- IsActive:如果該租戶可以使用該應用,此值為true。如果此值為false,那么禁止該租戶的用戶登錄系統。
AbpTenant類繼承自FullAuditedEntity。這意味着它有創建,修改以及刪除審計屬性。同時,它還是軟刪除的,即當我們刪除一個租戶時,它並沒有從數據庫中刪除,而是僅僅標記為已刪除的狀態。
最后,AbpTenant的Id定義為Int類型。
租戶管理者##
租戶管理者是執行租戶領域邏輯的服務:
public class TenantManager : AbpTenantManager<Tenant, Role, User>
{
public TenantManager(IRepository<Tenant> tenantRepository)
: base(tenantRepository)
{
}
}
租戶管理者也用於管理租戶特征。你可以在這里添加你自己的方法。你也可以重寫AbpTenantManager基類中的任何方法類滿足自己的需求。
默認租戶##
ABP和Module-Zero假設存在一個預定義的租戶,它的租戶名是“Default”,且Id是1。在一個單租戶的應用中,它被用作單獨的租戶。在一個多租戶的應用中,你可以刪除它或者標記為無效的,即IsActive字段置為false。