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

1,源码

 namespace Abp.Zero.EntityFramework
{
/// <summary>
/// Extension methods for <see cref="DbModelBuilder"/>.
/// </summary>
public static class AbpZeroDbModelBuilderExtensions
{
/// <summary>
/// Changes prefix for ABP tables (which is "Abp" by default).
/// Can be null/empty string to clear the prefix.
/// </summary>
/// <typeparam name="TTenant">The type of the tenant entity.</typeparam>
/// <typeparam name="TRole">The type of the role entity.</typeparam>
/// <typeparam name="TUser">The type of the user entity.</typeparam>
/// <param name="modelBuilder">Model builder.</param>
/// <param name="prefix">Table prefix, or null to clear prefix.</param>
/// <param name="schemaName">Schema name</param>
public static void ChangeAbpTablePrefix<TTenant, TRole, TUser>(this DbModelBuilder modelBuilder, string prefix, string schemaName = null)
where TTenant : AbpTenant<TUser>
where TRole : AbpRole<TUser>
where TUser : AbpUser<TUser>
{
prefix = prefix ?? ""; SetTableName<AuditLog>(modelBuilder, prefix + "AuditLogs", schemaName);
SetTableName<BackgroundJobInfo>(modelBuilder, prefix + "BackgroundJobs", schemaName);
SetTableName<Edition>(modelBuilder, prefix + "Editions", schemaName);
SetTableName<FeatureSetting>(modelBuilder, prefix + "Features", schemaName);
SetTableName<TenantFeatureSetting>(modelBuilder, prefix + "Features", schemaName);
SetTableName<EditionFeatureSetting>(modelBuilder, prefix + "Features", schemaName);
SetTableName<ApplicationLanguage>(modelBuilder, prefix + "Languages", schemaName);
SetTableName<ApplicationLanguageText>(modelBuilder, prefix + "LanguageTexts", schemaName);
SetTableName<NotificationInfo>(modelBuilder, prefix + "Notifications", schemaName);
SetTableName<NotificationSubscriptionInfo>(modelBuilder, prefix + "NotificationSubscriptions", schemaName);
SetTableName<OrganizationUnit>(modelBuilder, prefix + "OrganizationUnits", schemaName);
SetTableName<PermissionSetting>(modelBuilder, prefix + "Permissions", schemaName);
SetTableName<RolePermissionSetting>(modelBuilder, prefix + "Permissions", schemaName);
SetTableName<UserPermissionSetting>(modelBuilder, prefix + "Permissions", schemaName);
SetTableName<TRole>(modelBuilder, prefix + "Roles", schemaName);
SetTableName<Setting>(modelBuilder, prefix + "Settings", schemaName);
SetTableName<TTenant>(modelBuilder, prefix + "Tenants", schemaName);
SetTableName<UserLogin>(modelBuilder, prefix + "UserLogins", schemaName);
SetTableName<UserLoginAttempt>(modelBuilder, prefix + "UserLoginAttempts", schemaName);
SetTableName<TenantNotificationInfo>(modelBuilder, prefix + "TenantNotifications", schemaName);
SetTableName<UserNotificationInfo>(modelBuilder, prefix + "UserNotifications", schemaName);
SetTableName<UserOrganizationUnit>(modelBuilder, prefix + "UserOrganizationUnits", schemaName);
SetTableName<UserRole>(modelBuilder, prefix + "UserRoles", schemaName);
SetTableName<TUser>(modelBuilder, prefix + "Users", schemaName);
SetTableName<UserAccount>(modelBuilder, prefix + "UserAccounts", schemaName);
SetTableName<UserClaim>(modelBuilder, prefix + "UserClaims", schemaName);
SetTableName<RoleClaim>(modelBuilder, prefix + "RoleClaims", schemaName);
SetTableName<UserToken>(modelBuilder, prefix + "UserTokens", schemaName);
} internal static void SetTableName<TEntity>(this DbModelBuilder modelBuilder, string tableName, string schemaName)
where TEntity : class
{
if (schemaName == null)
{
modelBuilder.Entity<TEntity>().ToTable(tableName);
}
else
{
modelBuilder.Entity<TEntity>().ToTable(tableName, schemaName);
}
}
}
}

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开发中有什么遇到的问题或者有什么建议,欢迎大家留言。

ABP框架源码学习之修改默认数据库表前缀或表名称的更多相关文章

  1. ABP框架源码学习之授权逻辑

    asp.net core的默认的几种授权方法参考"雨夜朦胧"的系列博客,这里要强调的是asp.net core mvc中的授权和asp.net mvc中的授权不一样,建议先看前面& ...

  2. 集合框架源码学习之ArrayList

    目录: 0-0-1. 前言 0-0-2. 集合框架知识回顾 0-0-3. ArrayList简介 0-0-4. ArrayList核心源码 0-0-5. ArrayList源码剖析 0-0-6. Ar ...

  3. 集合框架源码学习之HashMap(JDK1.8)

    目录: 0-1. 简介 0-2. 内部结构分析 0-2-1. JDK18之前 0-2-2. JDK18之后 0-3. LinkedList源码分析 0-3-1. 构造方法 0-3-2. put方法 0 ...

  4. CI框架源码学习笔记1——index.php

    做php开发一年多了,陆陆续续用过tp/ci/yii框架,一直停留在只会使用的层面上,关于框架内部的结构实际上是不甚了解的.为了深入的学习,决定把CI框架的源码从头到尾的学习一下, 主要因为CI框架工 ...

  5. 集合框架源码学习之LinkedList

    0-1. 简介 0-2. 内部结构分析 0-3. LinkedList源码分析 0-3-1. 构造方法 0-3-2. 添加add方法 0-3-3. 根据位置取数据的方法 0-3-4. 根据对象得到索引 ...

  6. CI框架源码学习笔记7——Utf8.php

    愉快的清明节假期结束了,继续回到CI框架学习.这一节我们来看看Utf8.php文件,它主要是用来做utf8编码,废话不多说,上代码. class CI_Utf8 { /** * Class const ...

  7. CI框架源码学习笔记2——Common.php

    上一节我们最后说到了CodeIgniter.php,可是这一节的标题是Common.php,有的朋友可能会觉得很奇怪.事实上,CodeIgniter.php其实包含了ci框架启动的整个流程. 里面引入 ...

  8. CI框架源码学习笔记5——Hooks.php

    接着Benchmark.php往下看,下一个引入的文件是Hooks.php,我们称之为钩子.它的目的是在不改变核心文件的基础上,来修改框架的内部运作流程.具体使用方法参见手册http://codeig ...

  9. ABP框架源码中的Linq扩展方法

    文件目录:aspnetboilerplate-dev\aspnetboilerplate-dev\src\Abp\Collections\Extensions\EnumerableExtensions ...

随机推荐

  1. ubuntu 使用sudo apt-get update 出现 被配置多次导致无法升级错误解决方法

    这个周六周末在考虑升级自己GPU开发机,在琢磨使用docker来配置tensorflowGPU环境,在升级软件的时候爆出了如下错误 在 /etc/apt/sources.list.d/sogoupin ...

  2. WPF Binding学习(二)

    Binding作为数据的桥梁,连通业务逻辑层的对象(源对象)和UI的控件对象(目标对象).在这座桥梁上,我们不仅可以控制在源对象与目标对象是双向通行还是单向通行.还可以控制数据的放行时机,甚至可以在这 ...

  3. GStreamer Windows tutorial demo 开发环境配置

    GStreamer 示例程序在 Windows 环境配置时坑比较多,好不容易配置成功了,写篇文档分享一下安装的关键步骤 官方文档见:https://gstreamer.freedesktop.org/ ...

  4. zookeeper伪分布式集群环境搭建

    step1.下载 下载地址:http://zookeeper.apache.org/releases.html 将下载的压缩包放到用户家目录下(其他目录也可以) step2.解压 $tar –zxvf ...

  5. webpack编译流程漫谈

    前言 weback在web构建工具的激烈竞争中逐渐脱引而出. 无论是编译速度.报错提示.可扩展性等都给前端开发者耳目一新的感觉.本篇文章是个人对webpack的一点小研究总结. webpack在开发者 ...

  6. Android应用程序使用两个LinearLayout编排5个Button控件

    学习存档: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:androi ...

  7. CTF---Web入门第十二题 程序逻辑问题

    程序逻辑问题分值:20 来源: 实验吧 难度:中 参与人数:6909人 Get Flag:1993人 答题人数:2070人 解题通过率:96% 绕过 解题链接: http://ctf5.shiyanb ...

  8. AFO

    留坑 有点绝望 状态什么的,存在么 upd at 2017/11/14还算完满地结束了OI之路了吧.

  9. 浏览器的统一指针事件:Pointer Event

    在早期的浏览器,输入的事件其实相对单纯,只有考虑到鼠标和键盘两种:而当时的鼠标事件,其实就是 click.mousedown.mouseup 等等的事件.但是当手机.平板开始流行时候,再移动装置上的主 ...

  10. 互联网App应用程序测试流程及测试总结

    互联网App应用程序测试流程及测试总结 1. APP测试基本流程 1.1流程图 仍然为测试环境 Pass 1.2测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日 ...