修改日期 | 修改人 | 备注 |
2020-03-10 12:27:42[当前版本] | 潘帅 | 1.1 |
2020-03-10 11:55:27 | 潘帅 | 1.0 |
项目中需要支持MySQL数据库和达梦数据库两种开发环境,为了确保后端代码的一致性,减少切换数据库的工作量,基于ABP框架进行修改以便于在MySQL数据库和达梦数据库之间切换。
在VisualStudio中打开NuGet管理器,选择公司内部NuGet服务作为程序包源,为EntityFrameworkCore项目安装程序包RunGo.EntityFrameworkCore.DM用于支持达梦数据库。
注:程序包RunGo.EntityFrameworkCore.DM参考了开源项目FreeSql和Pomelo.EntityFrameworkCore.MySql,源码位于项目代码目录Code\Others\Mudules\RunGo\RunGo.EntityFrameworkCore.DM下,使用过程中遇到问题请及时沟通。
为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); } }
修改数据库连接字符串子项。
"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:扩展数据库连接字符串,对应达梦数据库
使用时根据测试环境或部署环境的数据库类型修改配置文件即可。
修改Web项目模块类的PreInitialize方法。
bool isDm = _appConfiguration["ConnectionStrings:IsDameng"] == "true" ? true : false;//是否为达梦数据库 Configuration.DefaultNameOrConnectionString = isDm?_appConfiguration.GetConnectionString(RunGoConsts.ExtendConnectionStringName): _appConfiguration.GetConnectionString(RunGoConsts.DefaultConnectionStringName);
修改Web项目启动类Startup的ConfigureServices方法。
bool isDm = _appConfiguration["ConnectionStrings:IsDameng"] == "true" ? true : false;//是否为达梦数据库 //Configure DbContext services.AddAbpDbContext<PersonnelDbContext>(options => { DbContextOptionsConfigurer.Configure(options.DbContextOptions, options.ConnectionString,isDm); });