ABP默认的数据库是SQLServer,不过ABP框架底层是EF框架,因此也是很容易支持其他类型的数据库的,本篇随笔介绍在ABP框架使用Mysql数据库,以及基于SQLServer创建MySql数据库的架构和数据的处理。

如果需要其他方式数据库的支持,那么需要引入相应的支持程序集。Nuget中安装MySql相关包,Oracle公司提供的MySql 包试了很多次,都还是用起来有问题,所以现在都是用的第三方的MySql包,这个包也是ABP官方文档中推荐使用的。

pomelo.entityframeworkcore.mysql

pomelo.entityframeworkcore.mysql.design

目前使用的是基于正式版的.NETCore5.0,那么Microsoft.EntityFrameworkCore.Relational对应版本是5.0.0。因此,对应这些版本的驱动如下图所示。

在EntityFrameworkCore层中找到XXDbContextConfigurer,修改DbContext中数据库配置,默认使用的SqlServer,修改为mysql。

namespace MyProject.EntityFrameworkCore
{
/// <summary>
/// 配置使用特定数据库的处理
/// </summary>
public static class MyProjectDbContextConfigurer
{
public static void Configure(DbContextOptionsBuilder<MyProjectDbContext> builder, string connectionString)
{
//builder.UseSqlServer(connectionString);//默认SQlServer
builder.UseMySql(connectionString, new MySqlServerVersion(new Version(5, 7)));//MySQL //builder.UseNpgsql(connectionString);//PostgreSQL
//builder.UseOracle(connectionString);//Oracle
} public static void Configure(DbContextOptionsBuilder<MyProjectDbContext> builder, DbConnection connection)
{
//builder.UseSqlServer(connection);//默认SQlServer
builder.UseMySql(connection, new MySqlServerVersion(new Version(5, 7)));//MySQL //builder.UseNpgsql(connection);//PostgreSQL
//builder.UseOracle(connection);//Oracle
}
}
}

其中UseMySql需要用到第二个版本参数,我Mysql用的是Mysql5.7,因此使用代码构建版本参数。

new MySqlServerVersion(new Version(5, 7)

我们在Host启动项目里面的appsettings.json里面定义了不同数据库的连接信息,如下所示。

{
"ConnectionStrings": {
"Default": "Server=.\\SQL2014; Database=MyProjectDb; Trusted_Connection=True;",
"Oracle": "User Id=orcl;Password=orcl;Data Source=orcl;Persist Security Info=True;",
"MySql": "Server=localhost;Database=myprojectdb;Uid=root;Pwd=123456;",
"PostgreSQL": "Server=localhost;Port=5432;Database=myprojectdb;User Id=postgres;Password=123456"
},
"RedisCache": {
"ConnectionString": "localhost",
"DatabaseId": "-1"
}, ...............

而我们系统不同的数据库连接就就是来自ConnectionStrings里面的键值对象,我们ABP框架里面,使用引用常数来配置对应的数据库连接。

    public class MyProjectDbContextFactory : IDesignTimeDbContextFactory<MyProjectDbContext>
{
public MyProjectDbContext CreateDbContext(string[] args)
{
var builder = new DbContextOptionsBuilder<MyProjectDbContext>(); //获取配置文件信息
var configuration = AppConfigurations.Get(WebContentDirectoryFinder.CalculateContentRootFolder()); //通过连接字符串切换对应的数据库,ConnectionStringName默认为Default
MyProjectDbContextConfigurer.Configure(builder, configuration.GetConnectionString(Constants.ConnectionStringName)); return new MyProjectDbContext(builder.Options);
}
}

那么我们修改其中对应的常数定义,切换为我们所需要的Mysql数据库即可,如下所示。

至此,代码上修改就完成了,那么我们现有运行的SQLServer数据库,如何迁移到Mysql环境中去呢?

2、基于SQLServer创建Mysql数据库的架构和数据

上面小节介绍了切换到其他数据库Mysql数据库的时候,代码上的调整修改,但是我们还需要把已有SQLServer上运行的数据库迁移到Mysql上去,如何处理呢。

有些人系统通过ABP带有的Migrator项目进行项目数据库的重构,不过我不系统使用这个,因为我们实际开发的时候,变动了很多数据库,而变动了再映射回到代码里面,比较麻烦,不如在数据库基础上进行迁移来的快捷完整。

我这里通过工具的方式,把SQLServer数据库导入到Mysql数据库里面,然后在导出脚本进行一定的调整就可以完成。

我这里说到的工具就是Navicat Premium,由于我的数据库用的是SQLServer2014,因此建议使用Navicat Premium15或更高版本来处理数据库的迁移,我测试过Navicat Premium·11是不行的。

在Navicat Premium工具上连接好Mysql数据库和SQLServer数据库,然后在Mysql里面创建一个同名的数据库,以Utf-8编码创建数据库即可,如下所示。

然后在工具上选择数据库传输

在弹出的界面中选择源数据库和目标数据库,如下所示。

然后一步步处理即可完成数据库结构和数据的导入,这样Mysql数据库里面就有对应的数据库结构和数据了。

不过完成这部还是不够十分完美,因为从SQLServer钟导入到Mysql数据库里面,数据库的自增长列全部被取消了,如果我们在管理界面里面修改,则无法修改带有约束关系的主键为自增长。

因此我们需要再次调整一下,也就是把Mysql数据库导出为SQL脚本,然后在脚本上进行一定的调整即可。

用Notepad++打开导出的数据库脚本,对自增长的表字段进行添加一个关键字AUTO_INCREMENT,标注为自增长即可,如下所示。

然后删除已有的Mysql数据库,然后重新创建对应名称的数据库,重新导入Mysql脚本进行运行生成新的表和数据即可完成。

运行ABP后台项目,启动Swagger界面,如下所示。

然后启动Vue+Element的客户端进行测试Mysql数据库的运行情况,前端正常。

以上就是介绍ABP框架使用Mysql数据库的代码调整,以及基于SQLServer创建Mysql数据库的架构和数据的操作过程

ABP框架使用Mysql数据库,以及基于SQLServer创建Mysql数据库的架构和数据的更多相关文章

  1. 【数据库开发】如何创建MySQL数据库连接池(一个基于libmysql的MySQL数据库连接池示例(C/C++版))

      http://blog.csdn.net/horace20/article/details/8087557 1.  一般架构说明 图 1 架构层次图 一般应用系统数据库访问模块可大致分为两层,一层 ...

  2. SQLServer创建用户自定义数据库用户

    创建用户自定义数据库用户注意事项 如果已忽略 FOR LOGIN,则新的数据库用户将被映射到同名的SQL Server登录名. 默认架构将是服务器为此数据库用户解析对象名时将搜索的第一个架构. 除非另 ...

  3. Mysql 5.7 基于组复制(MySQL Group Replication) - 运维小结

    之前介绍了Mysq主从同步的异步复制(默认模式).半同步复制.基于GTID复制.基于组提交和并行复制 (解决同步延迟),下面简单说下Mysql基于组复制(MySQL Group Replication ...

  4. ORACLE重装之后恢复数据库,相当于sqlserver的附加数据库

    在开发机器上经常会遇到重装系统的问题,重装之前如果ORACLE没有及时备份的话重装之后就纠结了,数据还原很头疼. 各种娘中只能找到一些ORACLE安装与重装系统前目录相同的解决办法,目录不同就没招了. ...

  5. iOS:CoreData数据库的使用一(创建单个数据库表)

    CoreData数据库框架:mac系统自带的数据库,它是苹果公司对sqlite进行封装而来的,既提供了对数据库的主要操作,也提供了具体的视图关系模型. 需要用到三个对象: 1•Managed Obje ...

  6. MySql、PostgreSql、SqlServer三种数据库的造数存储过程实例

    主要实例:把临时表tmp_table数据插入到目标表target_table 一.MySql造数存储过程实例 mysql造数 -- 第一步,创建临时表 CREATE TEMPORARY TABLE I ...

  7. MySQL 5.7 基于GTID创建运行主库的从库-xtrabackup+mysqldump

    一.GTID innobackupex备份实现主从同步 1)master备份 innobackupex --defaults-file=/etc/my.cnf --user=root --passwo ...

  8. MySQL索引,如何正确创建MySQL索引?

    索引可以提高数据的检索效率,也可以降低数据库的IO成本,并且索引还可以降低数据库的排序成本.排序分组操作主要消耗的就是CPU资源和内存,所以能够在排序分组操作中好好的利用索引将会极大地降低CPU资源的 ...

  9. ABP框架使用Oracle数据库,并实现从SQLServer中进行数据迁移的处理

    ABP框架的数据访问底层是基于EFCore(Entity Framework Core)的,是微软标志性且成熟的ORM,因此它本身是支持多种主流数据库MySQL,SqlServer,Oracle,SQ ...

随机推荐

  1. .net core mvc appsettings.json配置文件的使用

    配置文件的使用主要是两种用法 1.直接使用弱类型的数据 2.使用强类型的数据 (将配置的数据映射到类) 直接使用弱类型的数据  在appsetings.json文件中先新建两个节点 TestObj节点 ...

  2. # Maven:Could not transfer artifact org.springframework:spring-webmvc:pom:。。。(系统找不到文件),从网上clone到本地的项目报红

    解决办法: 确保maven配置正确,在maven的setting.xml配置文件中, 配置本地仓库路径 <localRepository>D:\Maven\文件名</localRep ...

  3. 【转载】图解Transformer(完整版)!

    在学习深度学习过程中很多讲的不够细致,这个讲的真的是透彻了,转载过来的,希望更多人看到(转自-张贤同学-公众号). 前言 本文翻译自 http://jalammar.github.io/illustr ...

  4. Docker - 解决 gitlab 容器上的项目进行 clone 时,IP 地址显示一串数字而不是正常 IP 地址的问题

    问题背景 通过 gitlab 容器创建了一个项目,想 clone 到本地,结果发现项目的 IP 地址是一串数字 问题排查 明明创建项目的时候,IP 地址还是正常的鸭! 再看看项目的 settings ...

  5. 如何使用 gitlab 或 github 执行npm run build

    一: 如何快速搭建一个组件库 首先,我们介绍一个快速包装组件库的工具:https://github.com/yanhaijing/jslib-base     按照文档来,就简单几步: npx @js ...

  6. 二级Parser应用教程

    01 应用背景 Ubidots是一个物联网云平台,通过设备友好的API(可通过HTTP / MQTT / TCP / UDP协议访问)简单安全地将硬件和数字输入连接到Ubidots Cloud. 它可 ...

  7. 多MDS变成单MDS的方法

    前言 之前有个cepher的环境上是双活MDS的,需要变成MDS,目前最新版本是支持这个操作的 方法 设置最大mds 多活的mds的max_mds会超过1,这里需要先将max_mds设置为1 ceph ...

  8. python实现祝福弹窗

    接下来教大家怎么用python献上满满的祝福.首先给大家看一下最终模样. 注:密集恐惧症患者勿入! 模样大家已经看见了,首先想想一下,当朋友打开你发送过去的软件, 然后点击运行,结果,一个一个的窗口慢 ...

  9. 源码分析:Semaphore之信号量

    简介 Semaphore 又名计数信号量,从概念上来讲,信号量初始并维护一定数量的许可证,使用之前先要先获得一个许可,用完之后再释放一个许可.信号量通常用于限制线程的数量来控制访问某些资源,从而达到单 ...

  10. web安全原理分析-SQL注入漏洞全解

    简介 靶场:榆林学院信息安全协会--入侵榆大实验靶场 数字型注入 1 字符型注入 1 布尔注入 1.布尔注入简介 mysql bool注入是盲注的一种.与报错注入不同,bool注入没有任何报错信息输出 ...