ABP框架源码学习之修改默认数据库表前缀或表名称
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框架源码学习之修改默认数据库表前缀或表名称的更多相关文章
- ABP框架源码学习之授权逻辑
asp.net core的默认的几种授权方法参考"雨夜朦胧"的系列博客,这里要强调的是asp.net core mvc中的授权和asp.net mvc中的授权不一样,建议先看前面& ...
- 集合框架源码学习之ArrayList
目录: 0-0-1. 前言 0-0-2. 集合框架知识回顾 0-0-3. ArrayList简介 0-0-4. ArrayList核心源码 0-0-5. ArrayList源码剖析 0-0-6. Ar ...
- 集合框架源码学习之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 ...
- CI框架源码学习笔记1——index.php
做php开发一年多了,陆陆续续用过tp/ci/yii框架,一直停留在只会使用的层面上,关于框架内部的结构实际上是不甚了解的.为了深入的学习,决定把CI框架的源码从头到尾的学习一下, 主要因为CI框架工 ...
- 集合框架源码学习之LinkedList
0-1. 简介 0-2. 内部结构分析 0-3. LinkedList源码分析 0-3-1. 构造方法 0-3-2. 添加add方法 0-3-3. 根据位置取数据的方法 0-3-4. 根据对象得到索引 ...
- CI框架源码学习笔记7——Utf8.php
愉快的清明节假期结束了,继续回到CI框架学习.这一节我们来看看Utf8.php文件,它主要是用来做utf8编码,废话不多说,上代码. class CI_Utf8 { /** * Class const ...
- CI框架源码学习笔记2——Common.php
上一节我们最后说到了CodeIgniter.php,可是这一节的标题是Common.php,有的朋友可能会觉得很奇怪.事实上,CodeIgniter.php其实包含了ci框架启动的整个流程. 里面引入 ...
- CI框架源码学习笔记5——Hooks.php
接着Benchmark.php往下看,下一个引入的文件是Hooks.php,我们称之为钩子.它的目的是在不改变核心文件的基础上,来修改框架的内部运作流程.具体使用方法参见手册http://codeig ...
- ABP框架源码中的Linq扩展方法
文件目录:aspnetboilerplate-dev\aspnetboilerplate-dev\src\Abp\Collections\Extensions\EnumerableExtensions ...
随机推荐
- Echarts---柱状图实现
做Echarts很简单,可以参看官网 http://echarts.baidu.com/index.html 作为程序员我们只需要把静态数据替换成我们自己需要的! 下面看一个自己做的例子: 还是先看看 ...
- Ubuntu环境下IPython的搭建和使用
1. Ubuntu操作系统版本 说明:Ubuntu 12.04.3 LTS自带的Python 2.7.3版本. 2. 安装IPython 说明: 输入命令sudo apt-get install ip ...
- bzoj:1457: 棋盘游戏
原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1457 看了网上dalao的题解,好像解释得并不是很清楚,就按照那种思路,自己YY了一个想法 ...
- GDOI 2016 & APIO 2016 游记
缓慢施工中...... UPD:APIO游记已烂尾......因为Cu滚粗+生病一直没心情写..过了几天就发现APIO的事都快忘光了...去看KPM的就可以啦 今年apio竟然没和gdoi撞...智障 ...
- [ZOJ3494]BCD Code
AC自动机+数位DP. 大致题意: BCD码就是把一个数十进制下的每一位分别用4位的二进制表示. 给你一坨01串,问你在一个区间内,有多少个数的BCD码不包含任何一个字符串. 因为涉及到多个串的匹配问 ...
- 记忆化搜索 dp学习~2
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1331 Function Run Fun Time Limit: 2000/1000 MS (Java/ ...
- 番外篇--Moddule Zero 版本管理与组织单位管理
Moddule Zero 版本管理 2.2.1 简介 大多数SaaS(多租户)应用都会有多个版本(包),这些版本的功能点也会各不相同.因此,他们能够为他们的租户(客户)提供不同的价格和功能点选项. 关 ...
- JavaSE笔记-泛型
定义带泛型的类 public class Cat<T> { //可以用T定义实例变量 private T name; //可以用T定义形参 //构造器没有<> public C ...
- mac通过自带的ssh连接Linux服务器并上传解压文件
需求: 1:mac连接linux服务器 2:将mac上的文件上传到linux服务器指定位置 3:解压文件 mac上使用命令,推荐使用 iterm2 .当然,也可以使用mac自带的终端工具. 操作过程: ...
- <c:forEach 的常用整理
<c:forEach items="${images}" var="img" varStatus="status"> <d ...