Abp 的数据库Seed, 并不是Migration 的时候生成的数据,而是运行时生成的数据。这个在SeedHelper.cs 中看到。
这样不用设置他们的ID 了,也少了迁移失败的可能麻烦。
多租户:
有一个超级管理员,和普通用户是一个实体类。他的TenantID是null.
每个租户管理员是一个User, 和普通用户是一个实体类。他有Admin 这个角色。他登陆之后,可以给他的成员设置角色,也可以设为Admin.
var adminUser = _context.Users.IgnoreQueryFilters().FirstOrDefault(u => u.TenantId == _tenantId && u.UserName == AbpUserBase.AdminUserName); if (adminUser == null) { adminUser = User.CreateTenantAdminUser(_tenantId, "admin@defaulttenant.com"); adminUser.Password = new PasswordHasher<User>(new OptionsWrapper<PasswordHasherOptions>(new PasswordHasherOptions())).HashPassword(adminUser, "123qwe"); adminUser.IsEmailConfirmed = true; adminUser.IsActive = true; _context.Users.Add(adminUser); _context.SaveChanges(); // Assign Admin role to admin user _context.UserRoles.Add(new UserRole(_tenantId, adminUser.Id, adminRole.Id)); _context.SaveChanges(); }
ABP和Module-Zero假设存在一个预定义的租户,它的租户名是“Default”,且Id是1。在一个单租户的应用中,它被用作单独的租户。上面的代码就是他的实现。运行时执行!
多租户的形式:
单应用多数据库。
数据库改变结构的时候,迁移麻烦
单应用单数据库。
维护简单,数据库比较笨重,所有数据都在一块
单应用混合数据库。
。。。
ABP 支持各种组合。