ABP框架源码学习之修改默认数据库表前缀或表名称
1,源码
1 1 namespace Abp.Zero.EntityFramework 2 2 { 3 3 /// <summary> 4 4 /// Extension methods for <see cref="DbModelBuilder"/>. 5 5 /// </summary> 6 6 public static class AbpZeroDbModelBuilderExtensions 7 7 { 8 8 /// <summary> 9 9 /// Changes prefix for ABP tables (which is "Abp" by default). 1010 /// Can be null/empty string to clear the prefix. 1111 /// </summary> 1212 /// <typeparam name="TTenant">The type of the tenant entity.</typeparam> 1313 /// <typeparam name="TRole">The type of the role entity.</typeparam> 1414 /// <typeparam name="TUser">The type of the user entity.</typeparam> 1515 /// <param name="modelBuilder">Model builder.</param> 1616 /// <param name="prefix">Table prefix, or null to clear prefix.</param> 1717 /// <param name="schemaName">Schema name</param> 1818 public static void ChangeAbpTablePrefix<TTenant, TRole, TUser>(this DbModelBuilder modelBuilder, string prefix, string schemaName = null) 1919 where TTenant : AbpTenant<TUser> 2020 where TRole : AbpRole<TUser> 2121 where TUser : AbpUser<TUser> 2222 { 2323 prefix = prefix ?? ""; 2424 2525 SetTableName<AuditLog>(modelBuilder, prefix + "AuditLogs", schemaName); 2626 SetTableName<BackgroundJobInfo>(modelBuilder, prefix + "BackgroundJobs", schemaName); 2727 SetTableName<Edition>(modelBuilder, prefix + "Editions", schemaName); 2828 SetTableName<FeatureSetting>(modelBuilder, prefix + "Features", schemaName); 2929 SetTableName<TenantFeatureSetting>(modelBuilder, prefix + "Features", schemaName); 3030 SetTableName<EditionFeatureSetting>(modelBuilder, prefix + "Features", schemaName); 3131 SetTableName<ApplicationLanguage>(modelBuilder, prefix + "Languages", schemaName); 3232 SetTableName<ApplicationLanguageText>(modelBuilder, prefix + "LanguageTexts", schemaName); 3333 SetTableName<NotificationInfo>(modelBuilder, prefix + "Notifications", schemaName); 3434 SetTableName<NotificationSubscriptionInfo>(modelBuilder, prefix + "NotificationSubscriptions", schemaName); 3535 SetTableName<OrganizationUnit>(modelBuilder, prefix + "OrganizationUnits", schemaName); 3636 SetTableName<PermissionSetting>(modelBuilder, prefix + "Permissions", schemaName); 3737 SetTableName<RolePermissionSetting>(modelBuilder, prefix + "Permissions", schemaName); 3838 SetTableName<UserPermissionSetting>(modelBuilder, prefix + "Permissions", schemaName); 3939 SetTableName<TRole>(modelBuilder, prefix + "Roles", schemaName); 4040 SetTableName<Setting>(modelBuilder, prefix + "Settings", schemaName); 4141 SetTableName<TTenant>(modelBuilder, prefix + "Tenants", schemaName); 4242 SetTableName<UserLogin>(modelBuilder, prefix + "UserLogins", schemaName); 4343 SetTableName<UserLoginAttempt>(modelBuilder, prefix + "UserLoginAttempts", schemaName); 4444 SetTableName<TenantNotificationInfo>(modelBuilder, prefix + "TenantNotifications", schemaName); 4545 SetTableName<UserNotificationInfo>(modelBuilder, prefix + "UserNotifications", schemaName); 4646 SetTableName<UserOrganizationUnit>(modelBuilder, prefix + "UserOrganizationUnits", schemaName); 4747 SetTableName<UserRole>(modelBuilder, prefix + "UserRoles", schemaName); 4848 SetTableName<TUser>(modelBuilder, prefix + "Users", schemaName); 4949 SetTableName<UserAccount>(modelBuilder, prefix + "UserAccounts", schemaName); 5050 SetTableName<UserClaim>(modelBuilder, prefix + "UserClaims", schemaName); 5151 SetTableName<RoleClaim>(modelBuilder, prefix + "RoleClaims", schemaName); 5252 SetTableName<UserToken>(modelBuilder, prefix + "UserTokens", schemaName); 5353 } 5454 5555 internal static void SetTableName<TEntity>(this DbModelBuilder modelBuilder, string tableName, string schemaName) 5656 where TEntity : class 5757 { 5858 if (schemaName == null) 5959 { 6060 modelBuilder.Entity<TEntity>().ToTable(tableName); 6161 } 6262 else 6363 { 6464 modelBuilder.Entity<TEntity>().ToTable(tableName, schemaName); 6565 } 6666 } 6767 } 6868 }
2,操作
1public class WCHSOFTDbContext : AbpZeroDbContext<Tenant, Role, User, WCHSOFTDbContext> 2{ 3 public WCHSOFTDbContext(DbContextOptions<WCHSOFTDbContext> options) 4 : base(options) 5 { 6 } 7 protected override void OnModelCreating(ModelBuilder modelBuilder) 8 { 9 modelBuilder.ChangeAbpTablePrefix<Tenant, Role, User>("Wch"); 10 base.OnModelCreating(modelBuilder); 11 } 12}
3,效果

4,后记
本人最近正在研究Abp框架,发现官方给的demo和文档只是交大家怎么使用,有些功能文档中并没有写明,所以必须通过查看源码来找到自己问题的解决方法。大家在abp开发中有什么遇到的问题或者有什么建议,欢迎大家留言。