ABP框架使用Mysql数据库,以及基于SQLServer创建Mysql数据库的架构和数据

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS SQL Server,基础系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: ABP框架使用Mysql数据库,以及基于SQLServer创建Mysql数据库的架构和数据

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数据库的架构和数据的操作过程

专注于代码生成工具、.Net/.NetCore 框架架构及软件开发,以及各种Vue.js的前端技术应用。著有Winform开发框架/混合式开发框架、微信开发框架、Bootstrap开发框架、ABP开发框架、SqlSugar开发框架等框架产品。
 转载请注明出处:撰写人:伍华聪  http://www.iqidi.com

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
7天前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
|
7天前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
6天前
|
SQL 关系型数据库 MySQL
Mysql数据恢复—Mysql数据库delete删除后数据恢复案例
本地服务器,操作系统为windows server。服务器上部署mysql单实例,innodb引擎,独立表空间。未进行数据库备份,未开启binlog。 人为误操作使用Delete命令删除数据时未添加where子句,导致全表数据被删除。删除后未对该表进行任何操作。需要恢复误删除的数据。 在本案例中的mysql数据库未进行备份,也未开启binlog日志,无法直接还原数据库。
|
SQL Java 数据库连接
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
313 0
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
|
SQL 关系型数据库 MySQL
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
224 0
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
|
存储 SQL 关系型数据库
MySQL---数据库从入门走向大神系列(五)-存储过程
MySQL---数据库从入门走向大神系列(五)-存储过程
209 0
MySQL---数据库从入门走向大神系列(五)-存储过程
|
数据库
MySQL---数据库从入门走向大神系列(四)-子查询、表与表之间的关系(3)
MySQL---数据库从入门走向大神系列(四)-子查询、表与表之间的关系
275 0
MySQL---数据库从入门走向大神系列(四)-子查询、表与表之间的关系(3)
|
SQL 关系型数据库 MySQL
MySQL---数据库从入门走向大神系列(二)-用Java对MySQL进行增删改查
MySQL---数据库从入门走向大神系列(二)-用Java对MySQL进行增删改查
278 0
MySQL---数据库从入门走向大神系列(二)-用Java对MySQL进行增删改查
|
数据库
MySQL---数据库从入门走向大神系列(一)-基础入门(2)
MySQL---数据库从入门走向大神系列(一)-基础入门(2)
187 0
MySQL---数据库从入门走向大神系列(一)-基础入门(2)
|
数据库
MySQL---数据库从入门走向大神系列(一)-基础入门(1)
MySQL---数据库从入门走向大神系列(一)-基础入门
161 0
MySQL---数据库从入门走向大神系列(一)-基础入门(1)

推荐镜像

更多