ASP.NET ZERO 学习 —— (19) 应用开发Demo之多租户
2017-03-28 16:16
405 查看
我们已经建立了一个功能齐全的应用程序,现在,我们需要将它转换为多租户应用。
当我们实现IMustHaveTenant 接口,ABP会根据当前用户自动筛选数据,同时从数据库中检索业务实体。所以,我们应该定义Person实体需要实现IMustHaveTenant 接口:
我们可能希望让Phone
4000
实体也实现IMustHaveTenant接口。如果我们直接使用phone repository来获取手机信息,那这是必要的。但在这个例子中,不必这么做。
因为实体发生了改变,我们需要创建新的数据迁移对象:
此命令将会创建一个新的数据迁移对象,迁移类增加了自动过滤所需的注释。我们不必知道它是什么,因为它是自动完成的。并且它在pbpersons表里增加了一个tenantid栏,如下所示:
我在最后加了一个默认值设置为1的选项。因此,当前people将自动被标记为默认租户(默认租户的ID为1)。
现在,我们再次更新数据库:
当我们启用了多租户模式,我们会在登录界面中看到多出来一个租户名称的输入框。当我们不输入它,我们将作为管理员进行登录。默认的admin账号密码为123qwe。
登录后,我们看到租户列表。我们可以添加新的租户:
我创建了一个新的租户叫NOVA。于是,租户列表中就包含了两个租户:
我可以注销并以NOVA的管理员登录:
当我们登录后,我们可以看到我们的电话簿是空的:
因为nova的电话簿信息是完全独立的,所以这里是空的。你可以添加信息,并且登录不同的租户,你可以发现不同的租户之间的电话簿是不一样的。
删除App文件夹,它包含SPA的Angularjs
删除AppBundleConfig 和 AppNavigationProvider
另外,你可以删除ApplicationController类并且改变AccountController到HomeController 的重定向
我们故意使用不同的方法来处理类似的任务,以显示不同的开发风格。ASPNET零提供了一个架构,但不限制你。你可以做自己的风格发展。
启用多租户模式
在最初我们将多租户模式禁用了,现在在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
删除AppBundleConfig 和 AppNavigationProvider
另外,你可以删除ApplicationController类并且改变AccountController到HomeController 的重定向
结论
在这个DEMO中,我们建立了一个完整的例子,覆盖了ASP.NET Zero大多数部分。希望能帮助你构建自己的应用系统。我们故意使用不同的方法来处理类似的任务,以显示不同的开发风格。ASPNET零提供了一个架构,但不限制你。你可以做自己的风格发展。
相关文章推荐
- ASP.NET ZERO 学习 —— (10) 应用开发Demo之创建实体对象
- ASP.NET ZERO 学习 —— (14) 应用开发Demo之新建People
- ASP.NET ZERO 学习 —— (13) 应用开发Demo之页面呈现Person数据
- ASP.NET ZERO 学习 —— (16) 应用开发Demo之删除用户
- ASP.NET ZERO 学习 —— (12) 应用开发Demo之测试应用服务
- ASP.NET ZERO 学习 —— (11) 应用开发Demo之创建应用服务
- ASP.NET ZERO 学习 —— (15) 应用开发Demo之授权
- ASP.NET ZERO 学习 —— (17) 应用开发Demo之筛选
- ASP.NET ZERO 学习 —— (18) 应用开发Demo之扩展电话信息
- ASP.NET ZERO 学习 —— (3) 开发手册之介绍和MVC 应用前端
- 基于Citus和ASP.NET Core开发多租户应用
- [ASP.NET学习笔记之六]开发高性能的ADO.NET应用
- Asp.net MVC 3实例学习之ExtShop(一)————创建应用并设置开发环境
- ASP.NET ZERO 学习 —— (7) 开发手册之基础架构
- ASP.NET Web Page应用深入探讨(强烈建议开发web的人学习)
- Asp.net MVC 3实例学习之ExtShop(一)————创建应用并设置开发环境
- [ASP.NET学习笔记之三十三]开发高性能的Web Service应用
- ASP.NET ZERO 学习 —— (8) 开发手册之基于令牌的身份认证&其他
- Asp.net MVC 3实例学习之ExtShop(一)————创建应用并设置开发环境
- 基于Citus和ASP.NET Core开发多租户应用