您的位置:首页 > 编程语言 > ASP

ASP.NET ZERO 学习 —— (19) 应用开发Demo之多租户

2017-03-28 16:16 405 查看
我们已经建立了一个功能齐全的应用程序,现在,我们需要将它转换为多租户应用。

启用多租户模式

在最初我们将多租户模式禁用了,现在在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
4000
实体也实现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零提供了一个架构,但不限制你。你可以做自己的风格发展。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: