1. 程式人生 > >ASP.NET ZERO 學習 —— (19) 應用開發Demo之多租戶

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
  • 刪除AppBundleConfigAppNavigationProvider
  • 另外,你可以刪除ApplicationController類並且改變AccountControllerHomeController 的重定向

結論

在這個DEMO中,我們建立了一個完整的例子,覆蓋了ASP.NET Zero大多數部分。希望能幫助你構建自己的應用系統。

我們故意使用不同的方法來處理類似的任務,以顯示不同的開發風格。ASPNET零提供了一個架構,但不限制你。你可以做自己的風格發展。