
背景
因客户国产化需求,需要将数据库改为达梦数据库。所以要对现有的ABP
项目进行达梦数据库的支持,目前项目使用的是MySQL
,现在需要在支持MySQL
的同时也支持达梦数据库。
链接字符串修改
在达梦数据库中创建一个用户并给这个用户赋予DBA
的权限,在达梦数据库模式中创建一个与用户名一样的模式并设置模式的拥有者为新建的用户。
以下链接字符串使用默认的用户进行测试:
"server=LOCALHOST;port=5236;user id=SYSDBA;password=New@2025;database=DAMENG"
添加新的配置节点,以便支持多种数据库。
"DataBaseUseType": {
"Type": "dm",
"Schema": "SYSDBA"
}
添加达梦的EF库
添加达梦的EF
库的实现,添加Nuget包DM.Microsoft.EntityFrameworkCore
使用达梦数据库
在XXXXXXEntityFrameworkCoreModule
或者XXXXXXHttpApiHostModule
类中有ConfigureServices
方法,将UseMySQL()
或者UseSqlServer()
进行替换。
var databaseType = configuration["DataBaseUseType:Type"];
databaseType = string.IsNullOrWhiteSpace(databaseType) ? "mysql" : databaseType.ToLower();
Configure<AbpDbContextOptions>(options =>
{
switch (databaseType)
{
case "mysql":
options.UseMySQL();
break;
case "dm":
options.Configure(ctx =>
{
if (ctx.ExistingConnection != null)
{
ctx.DbContextOptions.UseDm(ctx.ExistingConnection);
}
else
{
ctx.DbContextOptions.UseDm(ctx.ConnectionString);
}
});
break;
default:
options.UseMySQL();
break;
}
});
ConfigureServices
方法整体补全。
public override void ConfigureServices(ServiceConfigurationContext context)
{
var configuration = context.Services.GetConfiguration();
var databaseType = configuration["DataBaseUseType:Type"];
databaseType = string.IsNullOrWhiteSpace(databaseType) ? "mysql" : databaseType.ToLower();
Configure<AbpDbContextOptions>(options =>
{
switch (databaseType)
{
case "mysql":
options.UseMySQL();
break;
case "dm":
options.Configure(ctx =>
{
if (ctx.ExistingConnection != null)
{
ctx.DbContextOptions.UseDm(ctx.ExistingConnection);
}
else
{
ctx.DbContextOptions.UseDm(ctx.ConnectionString);
}
});
break;
default:
options.UseMySQL();
break;
}
});
context.Services.AddAbpDbContext<XXXXXXDbContext>(options =>
{
options.AddDefaultRepositories(includeAllEntities: true);
});
}
数据库迁移
如果通过达梦数据库迁移工具进行数据库迁移的话,那么修改代码到这里基本结束了。如果需要通过EF
进行数据库迁移就需要进行最后移除的修改。
找到XXXXXXMigrationDbContextFactory
类并将UseMySql
或者UseSqlServer
替换为UseDm
即可。
由于本项目需要支持MySQL与达梦数据库,所以需要稍微改动。
public XXXXXXServiceMigrationDbContext CreateDbContext(string[] args)
{
var configuration = BuildConfiguration();
var databaseType = configuration["DataBaseUseType:Type"];
databaseType = string.IsNullOrWhiteSpace(databaseType) ? "mysql" : databaseType.ToLower();
var builder = new DbContextOptionsBuilder<XXXXXXServiceMigrationDbContext>();
switch (databaseType)
{
case "mysql":
builder=builder.UseMySql(configuration.GetConnectionString("Default"), ServerVersion.AutoDetect(configuration.GetConnectionString("Default")));
break;
case "dm":
builder = builder.UseDm(configuration.GetConnectionString("Default"));
break;
default:
builder = builder.UseMySql(configuration.GetConnectionString("Default"), ServerVersion.AutoDetect(configuration.GetConnectionString("Default")));
break;
}
return new XXXXXXServiceMigrationDbContext(builder.Options);
}
以上修改完毕后就可以进行数据库迁移了,在程序包管理控制台中依次使用以下迁移命令即可。
Add-Migration 、 Update-DataBase
XXXXXX为代指,不同的项目期项目名称都不相同,请根据自身项目确定。
转载请注明:清风亦平凡 » ABP集成达梦数据库