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

  • 相关阅读:
    【洛谷】NOIP提高组模拟赛Day2【动态开节点/树状数组】【双头链表模拟】
    【10.7校内测试】【队列滑窗】【2-sat】【贪心+栈二分+线段树(noip模拟好题)】【生日祭!】
    【10.6校内测试】【小模拟】【hash+线段树维护覆盖序列】
    【洛谷】NOIP提高组模拟赛Day1【组合数学】【贪心+背包】【网络流判断是否满流以及流量方案】
    【10.5校内测试】【DP】【概率】
    【洛谷】1174:打砖块
    【10.4校内测试】【轮廓线DP】【中国剩余定理】【Trie树+博弈】
    【10.3校内测试【国庆七天乐!】】【DP+组合数学/容斥】【spfa多起点多终点+二进制分类】
    【二分图】性质
    【9.23校内测试】【抽屉原理】【乱搞??(找众数】【Trie】
  • 原文地址:https://www.cnblogs.com/wuhuacong/p/14097452.html
Copyright © 2020-2023  润新知