abp框架源码学习之修改默认数据库表前缀或表名称(代码片段)

yanglang yanglang     2023-01-08     676

关键词:

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 : class
57         
58             if (schemaName == null)
59             
60                 modelBuilder.Entity<TEntity>().ToTable(tableName);
61             
62             else
63             
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开发中有什么遇到的问题或者有什么建议,欢迎大家留言。

abp修改abp.zero的实体映射类,使生成的表和字段为大写状态

...以通过一段sql快捷的配置出一个报表页面。部分sql会与abp框架的一些系统表做关联查询,而abp的映射类没有单独设置表和字段的名称,默认用类名和属性名,区分大小写,造成写sql时需要对这些表加入双引号,不是很方便。本篇... 查看详情

phplaravel框架学习之建立数据库并填充测试数据(代码片段)

phpLaravel框架学习(一)phpLaravel框架学习之Laravel建立数据库并填充测试数据建立数据库前面我们已经明确目标网站的基本功能,现在我们先来建立它的数据库。设计数据库从功能上看,我们的数据库只需要两张表即可,a... 查看详情

hibernate框架学习之增删改查helloworld

插入数据删除数据修改数据查询单条数据查询多条数据HelloWorldApp.javapackagecn.itcast.h3.helloworld;importorg.hibernate.Session;importorg.hibernate.SessionFactory;importorg.hibernate.Transaction;importorg.hibernate.cfg.Configur 查看详情

更改 ABP.IO 的表前缀和架构

...:37【问题描述】:我正在尝试更改ABP.IO(https://www.abp.io/)的数据库表前缀和架构。我找到了它的两个属性,但不确定在哪里更改以影响所有内容。有人有想法吗?属性:Volo.Abp.Data.AbpCommonDbProperties.DbTablePre 查看详情

caffe源码学习之proto数据格式1

...一下自己之前的理解。 正文:  我们先不看caffe的框架结构,先介绍一下caffe.proto,是google开源的一种数据交互格式--Google&nbs 查看详情

大数据学习之sqoop框架25

...apache.org/ 2)场景传统型缺点,分布式存储。把传统型数据库数据迁移。ApacheSqoop(TM)是一种用于在ApacheHadoop和结构化数据存储(如关系数据库)之间高效传输批量数据的工具。 2:Sqoop安装部署1)下载安装包2)解压tar-zx... 查看详情

hibernate框架学习之多表查询helloworld

packagecn.itcast.h3.hql;importjava.util.List;importorg.hibernate.Query;importorg.hibernate.Session;importcn.itcast.h3.hql.vo.StudentModel;importcn.itcast.h3.hql.vo.TeacherModel;importcn.itcast.h3.util 查看详情

hibernate框架学习之数据模型-pojo

...构造方法2)提供一个标识属性,作为对象的主键,映射数据库表主键通常使用uuid作为主键3)对所有其他属性进行私有化声明,并进行标准封装属性声明时使用封装类模型,避免使用基本数据类型4)不要使用final修饰符(否则将... 查看详情

小白学习之pytorch框架-动手学深度学习(begin)

...一本书-花书-动手学深度学习pytorch版,原书用的深度学习框架是MXNet,这个框架经过Gluon重新再封装,使用风格非常接近pytorch,但是由于pytorch越来越火,个人又比较执着,想学pytorch,好,有个大神来了,把《动手学深度学习》... 查看详情

kettle学习之--缓慢变化维度(scd)

我们在ETL的过程中就要考虑到缓慢变化维度的处理。对于缓慢变化维度,有三种情况:1.缓慢变化维度的第一种类型:历史数据需要修改。这种情况下,我们使用update方法来修改表中的数据。例如:产品的id为123后来发现id错了,... 查看详情

hibernate框架学习之持久化对象oid

持久化对象唯一标识——OID1)数据库中使用主键可以区分两个对象是否相同2)Java语言中使用对象的内存地址区分对象是否相同3)Hibernate中使用OID区分对象是否相同Hibernate认为每一个不同的对象应该具有一个唯一的标识,称这个标... 查看详情

wpf学习之x名称空间详解

X名称空间里面的成员(如X:Name,X:Class)都是写给XAML编译器看的、用来引导XAML代码将XAML代码编译为CLR代码。4.1X名称空间里面到底都有些什么?x名称空间映射的是:http://schemas.microsoft.com/winfx/2006/xaml,望文生义,它包含的类均与解析XA... 查看详情

大数据学习之mapreduce基础与yarn集群安装09

...分布式文件系统HDFS海量数据的计算:hadoop->分布式计算框架MapReduce 2什么是MapReduce? 分布式程序的编程框架,java->sshssm,目的:简化开发!是基于hadoop的数据分析应用的核心框架。mapreduce的功能:将用户编写的业务逻... 查看详情

集合框架学习之guavacollection

开源工具包:Guava:GoogleCollectionApache:CommonsCollecton 1.1GoogleCollectionsGuava:google的工程师利用传说中的“20%时间”开发的集合库,它是对jdk提供的扩展,提供了很多使用的类来简化代码jar包:https://code.google.com/p/guava-libraries/源码... 查看详情

html5学习之浏览器的私有前缀

浏览器的私有前缀是为了兼容老版本的写法比较新版本的浏览器无需添加1.私有前缀-moz-:代表firefox(火狐)浏览器的私有属性-ms-:代表IE浏览器的私有属性-webkit-:代表safarichrome私有属性-o-:代表opera(欧朋)浏览器私有属性2.提倡写法一... 查看详情

chrome源码学习之:js与底层c++的通信

以查询历史记录为例:1.在上层history.js中通过chrome.send()来向底层发送事件请求和相关参数,其中‘queryHistory‘为信号名称,[this.searchText_,this.offset_,this.rangeInDays_,endTime,maxResults]为向底层传递的参数:chrome.send(‘queryHistory‘,[this.se... 查看详情

[architect]abp框架原理解析unitofwork

...请求中,共享同一个工作单元.同时在Abp中,不仅支持同一个数据库连接,还支持事务处理. 分析Abp源码1.UnitOfWorkRegistrar 2.ComponentRegistered  3.Is 查看详情

[architect]abp框架原理解析unitofwork

...请求中,共享同一个工作单元.同时在Abp中,不仅支持同一个数据库连接,还支持事务处理. 分析Abp源码1.UnitOfWorkRegistrar650)this.width=650;"src="https://images2015 查看详情