2020-03-10 11:55:27 版本 : 在ABP框架中使用达梦数据库并支持数据库自动切换
作者: 潘帅 于 2020年03月10日 发布在分类 / 人防组 / 人防后端 下,并于 2020年03月10日 编辑
 历史版本

修改日期 修改人 备注
2020-03-10 12:27:42[当前版本] 潘帅 1.1
2020-03-10 11:55:27 潘帅 1.0

项目中需要支持MySQL数据库和达梦数据库两种开发环境,为了确保后端代码的一致性,减少切换数据库的工作量,基于ABP框架进行修改以便于在MySQL数据库和达梦数据库之间切换。


1.安装基于EFCore的达梦数据库驱动扩展包

在VisualStudio中打开NuGet管理器,选择公司内部NuGet服务作为程序包源,为EntityFrameworkCore项目安装程序包RunGo.EntityFrameworkCore.DM用于支持达梦数据库。


注:程序包RunGo.EntityFrameworkCore.DM参考了开源项目FreeSql和Pomelo.EntityFrameworkCore.MySql,源码位于项目代码目录Code\Others\Mudules\RunGo\RunGo.EntityFrameworkCore.DM下,使用过程中遇到问题请及时沟通。


2.修改EntityFrameworkCore项目

为DbContextOptionsConfigurer添加重载方法,用于切换选择MySql数据库或达梦数据库。


        public static void Configure(DbContextOptionsBuilder<PersonnelDbContext> dbContextOptions,string connectionString,bool isDm)
        {
            if (isDm)//达梦数据库
            {
                dbContextOptions.UseDm(connectionString);
            }
            else//MySQL数据库
            {
                dbContextOptions.UseMySql(connectionString);
            }
        }

修改xxxDbContextFactory类,用于选择切换不同的数据库连接字符串。

    public class PersonnelDbContextFactory : IDesignTimeDbContextFactory<PersonnelDbContext>
    {
        public PersonnelDbContext CreateDbContext(string[] args)
        {
            var builder = new DbContextOptionsBuilder<PersonnelDbContext>();
            var configuration = AppConfigurations.Get(WebContentDirectoryFinder.CalculateContentRootFolder());
            bool isDm = configuration["ConnectionStrings:IsDameng"] == "true"?true:false;//是否为达梦数据库

            string connectionString = configuration.GetConnectionString(RunGoConsts.DefaultConnectionStringName);//默认数据库连接字符串
            if (isDm)
            {
                connectionString = configuration.GetConnectionString(RunGoConsts.ExtendConnectionStringName);//达梦数据库连接字符串
            }

            DbContextOptionsConfigurer.Configure(builder,connectionString,isDm);

            return new PersonnelDbContext(builder.Options);
        }
    }



3.修改Web项目配置文件和启动类

3.1修改appsettings.json

修改数据库连接字符串子项。

  "ConnectionStrings": {
    "IsDameng": "false",
    "Default": "Server=localhost; Database=PersonnelDb;",
    "Extend": "Server=127.0.0.1:5236;UID=USER1;PWD=Admin123456;"
  }
IsDameng:是否为达梦数据库,true为是,false为否

Default:默认数据库连接字符串,对应MySQL数据库

Extend:扩展数据库连接字符串,对应达梦数据库


使用时根据测试环境或部署环境的数据库类型修改配置文件即可。


3.2修改xxWebModule

修改Web项目模块类的PreInitialize方法。

            bool isDm = _appConfiguration["ConnectionStrings:IsDameng"] == "true" ? true : false;//是否为达梦数据库

            Configuration.DefaultNameOrConnectionString = isDm?_appConfiguration.GetConnectionString(RunGoConsts.ExtendConnectionStringName): _appConfiguration.GetConnectionString(RunGoConsts.DefaultConnectionStringName);


3.3修改Startup

修改Web项目启动类Startup的ConfigureServices方法。

            bool isDm = _appConfiguration["ConnectionStrings:IsDameng"] == "true" ? true : false;//是否为达梦数据库

            //Configure DbContext
            services.AddAbpDbContext<PersonnelDbContext>(options =>
            {
                DbContextOptionsConfigurer.Configure(options.DbContextOptions, options.ConnectionString,isDm);
            });


 附件

附件类型

PNGPNG

历史版本-目录  [回到顶端]
    知识分享平台 -V 4.8.7 -wcp