ABP框架源码学习之修改默认数据库表前缀或表名称

1,源码

 1 namespace Abp.Zero.EntityFramework 2 { 3 /// <summary> 4 /// Extension methods for <see cref="DbModelBuilder"/>. 5 /// </summary> 6 public static class AbpZeroDbModelBuilderExtensions 7 { 8 /// <summary> 9 /// Changes prefix for ABP tables (which is "Abp" by default).10 /// Can be null/empty string to clear the prefix.11 /// </summary>12 /// <typeparam name="TTenant">The type of the tenant entity.</typeparam>13 /// <typeparam name="TRole">The type of the role entity.</typeparam>14 /// <typeparam name="TUser">The type of the user entity.</typeparam>15 /// <param name="modelBuilder">Model builder.</param>16 /// <param name="prefix">Table prefix, or null to clear prefix.</param>17 /// <param name="schemaName">Schema name</param>18 public static void ChangeAbpTablePrefix<TTenant, TRole, TUser>(this DbModelBuilder modelBuilder, string prefix, string schemaName = null)19 where TTenant : AbpTenant<TUser>20 where TRole : AbpRole<TUser>21 where TUser : AbpUser<TUser>22 {23 prefix = prefix ?? "";24 25 SetTableName<AuditLog>(modelBuilder, prefix + "AuditLogs", schemaName);26 SetTableName<BackgroundJobInfo>(modelBuilder, prefix + "BackgroundJobs", schemaName);27 SetTableName<Edition>(modelBuilder, prefix + "Editions", schemaName);28 SetTableName<FeatureSetting>(modelBuilder, prefix + "Features", schemaName);29 SetTableName<TenantFeatureSetting>(modelBuilder, prefix + "Features", schemaName);30 SetTableName<EditionFeatureSetting>(modelBuilder, prefix + "Features", schemaName);31 SetTableName<ApplicationLanguage>(modelBuilder, prefix + "Languages", schemaName);32 SetTableName<ApplicationLanguageText>(modelBuilder, prefix + "LanguageTexts", schemaName);33 SetTableName<NotificationInfo>(modelBuilder, prefix + "Notifications", schemaName);34 SetTableName<NotificationSubscriptionInfo>(modelBuilder, prefix + "NotificationSubscriptions", schemaName);35 SetTableName<OrganizationUnit>(modelBuilder, prefix + "OrganizationUnits", schemaName);36 SetTableName<PermissionSetting>(modelBuilder, prefix + "Permissions", schemaName);37 SetTableName<RolePermissionSetting>(modelBuilder, prefix + "Permissions", schemaName);38 SetTableName<UserPermissionSetting>(modelBuilder, prefix + "Permissions", schemaName);39 SetTableName<TRole>(modelBuilder, prefix + "Roles", schemaName);40 SetTableName<Setting>(modelBuilder, prefix + "Settings", schemaName);41 SetTableName<TTenant>(modelBuilder, prefix + "Tenants", schemaName);42 SetTableName<UserLogin>(modelBuilder, prefix + "UserLogins", schemaName);43 SetTableName<UserLoginAttempt>(modelBuilder, prefix + "UserLoginAttempts", schemaName);44 SetTableName<TenantNotificationInfo>(modelBuilder, prefix + "TenantNotifications", schemaName);45 SetTableName<UserNotificationInfo>(modelBuilder, prefix + "UserNotifications", schemaName);46 SetTableName<UserOrganizationUnit>(modelBuilder, prefix + "UserOrganizationUnits", schemaName);47 SetTableName<UserRole>(modelBuilder, prefix + "UserRoles", schemaName);48 SetTableName<TUser>(modelBuilder, prefix + "Users", schemaName);49 SetTableName<UserAccount>(modelBuilder, prefix + "UserAccounts", schemaName);50 SetTableName<UserClaim>(modelBuilder, prefix + "UserClaims", schemaName);51 SetTableName<RoleClaim>(modelBuilder, prefix + "RoleClaims", schemaName);52 SetTableName<UserToken>(modelBuilder, prefix + "UserTokens", schemaName);53 }54 55 internal static void SetTableName<TEntity>(this DbModelBuilder modelBuilder, string tableName, string schemaName)56 where TEntity : class57 {58 if (schemaName == null)59 {60 modelBuilder.Entity<TEntity>().ToTable(tableName);61 }62 else63 {64 modelBuilder.Entity<TEntity>().ToTable(tableName, schemaName); 65 }66 }67 }68 }

2,操作

public class WCHSOFTDbContext : AbpZeroDbContext<Tenant, Role, User, WCHSOFTDbContext>{  public WCHSOFTDbContext(DbContextOptions<WCHSOFTDbContext> options)   : base(options) { } protected override void OnModelCreating(ModelBuilder modelBuilder) {   modelBuilder.ChangeAbpTablePrefix<Tenant, Role, User>("Wch");   base.OnModelCreating(modelBuilder); }}

3,效果

 4,后记

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

相关文章