學習在asp.net zero系統中如何切換多租戶及沒有租戶的設定:
- 配置多租戶,為實體添加TenantID
- 資料庫遷移
- 修改DemoObjectAppService服務類的實體建立方法
- 配置郵件發送
- 建立租戶,并添加資料測試
- 切換為無租戶系統
配置多租戶,為實體添加TenantID
asp.net zero系統預設采用多租戶設定,并且預設有一個default的租戶名稱。這裡需要對實體類(領域模型),添加TenantID,實作IMayHaveTenant接口
[Table("DemoObjects")]
public class DemoObject : FullAuditedEntity,IMayHaveTenant
{
/// <summary>
/// 租戶ID
/// </summary>
public int? TenantId { get; set; }
...
}
在SISDbContext下為DemoObject添加租戶ID為索引
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
//配置租戶ID
modelBuilder.Entity<DemoObject>(b =>
{
b.HasIndex(e => new { e.TenantId });
});
添加資料庫遷移
- 清空DemoObjects表,執行sql:
- 先添加資料庫遷移:
add-migration addTenantId2DemoObject
- 再更新資料庫:
update-database
修改DemoObjectAppService服務類的實體建立方法,添加租戶ID
/// <summary>
/// 建立實體
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[AbpAuthorize(AppPermissions.Pages_Demo_Create)]
private async Task Create(CreateOrEditDemoObjectDto input)
{
var demoObject = ObjectMapper.Map<DemoObject>(input);
//如果租戶ID不為空,則添加租戶ID
if (AbpSession.TenantId!=null)
{
demoObject.TenantId = (int)AbpSession.TenantId;
}
await _demoObjectRepository.InsertAsync(demoObject);
}
配置郵件發送
運作asp.net zero系統,在系統的設定->郵箱設定發送郵箱參數:這裡以qq郵箱作為發送郵箱,需要登入qq郵箱開啟POP3/SMTP服務:
開啟POP3/SMTP服務

在asp.net zero設定發送郵箱:
發送郵箱設為qq郵箱,端口為587,SMTP伺服器:smtp.qq.com,使用者名自己設定,密碼這裡不是qq郵箱登入密碼而實開啟pop3服務的授權碼 ,儲存設定
asp.net zero系統預設在調試模式下不發送郵件,需要到SIS.Core項目下的SISCoreModule.cs設定:注釋掉下面代碼,運作系統就可以在"系統->設定->郵箱"測試發送郵件功能
//預設Debug模式下不能發送郵件
//if (DebugHelper.IsDebug)
//{
// //Disabling email sending in debug mode
// Configuration.ReplaceService<IEmailSender, NullEmailSender>(DependencyLifeStyle.Transient);
//}
測試郵件:
建立租戶,并添加資料測試
先不設定租戶,以admin登入系統,添加租戶tenant1,并設定郵箱,這是系統會發送激活郵件。先登出系統,登入郵箱,點選驗證會擷取到租戶的使用者名和密碼。
在租戶tenant1下登入系統,建立u1_t1的測試實體DemoObject,再在default租戶下登入系統,建立u1_default的測試實體,再租戶為空時,登入系統,添加u1_null的測試實體。
這是會發現在三個子系統下,使用者的資料實作了隔離,互不影響,也看不到其他租戶的資料。這就是多租戶。
切換到無租戶的系統
在SIS.Core.Shared下的SISConsts下設定
public const bool MultiTenancyEnabled = false;
,可以将系統設定為無租戶系統。
這是登入時無租戶選擇,以admin登入,這時測試實體顯示的時u1_default。說明系統在無租戶的情況下是以系統預設建立的default租戶系統運作。