ASP.NET ZERO 學習 —— (19) 應用開發Demo之多租戶
我們已經建立了一個功能齊全的應用程式,現在,我們需要將它轉換為多租戶應用。
啟用多租戶模式
在最初我們將多租戶模式禁用了,現在在AbpZeroTemplateCoreModule類裡重新啟用它:
Configuration.MultiTenancy.IsEnabled = true;
讓Entity適應多租戶
在多租戶應用裡,租戶的實體應該與其他租戶隔離。在這個例子中,每個租戶應該有自己的電話簿,並且不能被其他租戶看見。
當我們實現IMustHaveTenant 介面,ABP會根據當前使用者自動篩選資料,同時從資料庫中檢索業務實體。所以,我們應該定義Person實體需要實現IMustHaveTenant
[Table("PbPersons")]
public class Person : FullAuditedEntity, IMustHaveTenant
{
public const int MaxNameLength = 32;
public const int MaxSurnameLength = 32;
public const int MaxEmailAddressLength = 255;
public virtual int TenantId { get; set; }
[Required]
[MaxLength(MaxNameLength)]
public virtual string Name { get; set; }
[Required]
[MaxLength(MaxSurnameLength)]
public virtual string Surname { get; set; }
[MaxLength(MaxEmailAddressLength)]
public virtual string EmailAddress { get; set; }
public virtual ICollection<Phone> Phones { get; set; }
}
我們可能希望讓Phone實體也實現IMustHaveTenant介面。如果我們直接使用phone repository來獲取手機資訊,那這是必要的。但在這個例子中,不必這麼做。
因為實體發生了改變,我們需要建立新的資料遷移物件:
Add-Migration "Implemented_IMustHaveTenant_For_Person"
此命令將會建立一個新的資料遷移物件,遷移類增加了自動過濾所需的註釋。我們不必知道它是什麼,因為它是自動完成的。並且它在pbpersons表裡增加了一個tenantid欄,如下所示:
AddColumn("dbo.PbPersons", "TenantId", c => c.Int(nullable: false, defaultValue: 1));
我在最後加了一個預設值設定為1的選項。因此,當前people將自動被標記為預設租戶(預設租戶的ID為1)。
現在,我們再次更新資料庫:
Update-Database
執行多租戶應用
已經搞定了!我們可以測試下這個應用,執行並進行登入:
當我們啟用了多租戶模式,我們會在登入介面中看到多出來一個租戶名稱的輸入框。當我們不輸入它,我們將作為管理員進行登入。預設的admin賬號密碼為123qwe。
登入後,我們看到租戶列表。我們可以新增新的租戶:
我建立了一個新的租戶叫NOVA。於是,租戶列表中就包含了兩個租戶:
我可以登出並以NOVA的管理員登入:
當我們登入後,我們可以看到我們的電話簿是空的:
因為nova的電話簿資訊是完全獨立的,所以這裡是空的。你可以新增資訊,並且登入不同的租戶,你可以發現不同的租戶之間的電話簿是不一樣的。
刪除SPA
如果你開發的是MPA,那麼你肯定希望在專案中刪除SPA相關檔案。非常簡單:在.Web專案中,刪除以下檔案及資料夾
- 刪除App資料夾,它包含SPA的Angularjs
- 刪除AppBundleConfig 和 AppNavigationProvider
- 另外,你可以刪除ApplicationController類並且改變AccountController到HomeController 的重定向
結論
在這個DEMO中,我們建立了一個完整的例子,覆蓋了ASP.NET Zero大多數部分。希望能幫助你構建自己的應用系統。
我們故意使用不同的方法來處理類似的任務,以顯示不同的開發風格。ASPNET零提供了一個架構,但不限制你。你可以做自己的風格發展。