abp 接入国产达梦8数据库
1.修改数据库连接
"Default": "server=host;port=5236;user id=ABP;password=1q2w3E*;database=ABP",
建议用户名和数据库一样,后期便于处理
2,添加达梦的ef库,sdk
<PackageReference Include="DM.Microsoft.EntityFrameworkCore" Version="3.1.0.20604" />
3,修改引用的地方,使用达梦数据库
XXXXHttpApiHostModule
Configure<AbpDbContextOptions>(options =>
{
options.Configure(ctx =>
{
if (ctx.ExistingConnection != null)
{
ctx.DbContextOptions.UseDm(ctx.ExistingConnection);
}
else
{
ctx.DbContextOptions.UseDm(ctx.ConnectionString);
}
});
});
XXXXHttpApiHostMigrationsDbContextFactory
var builder = new DbContextOptionsBuilder<XXXXHttpApiHostMigrationsDbContext>()
.UseDm(configuration.GetConnectionString(XXXX"));
4.问题记录
4.1打开数据库连接失败
第一步就来了数据库竟然连接不上,IP地址没问题,用户存在,密码也没错,问题找了一下发现问题
检查了好一会儿才发现还是对达梦数据库的结构理解不到位,达梦使用的是登录、用户、模式的结构。以MySQL,Pg为例,一个用户下面可以有多个数据库,root用户下可以见A、B、C三个库,连接字符串写“Server=xxx;DataBase=A;User=root;Password=PWD;”即可。而达梦是一个用户下面可以有多个模式,SYSDBA下可以有D、E、F三个模式,想要访问D模式就需要在查询语句的表名前面加上模式名,然而达梦的数据库连接字符串并不支持这么些。所以通常做法是创建D、E、F三个用户,然后分别创建D、E、F三个模式分给用户,让用户和模式名称一样,就能访问了。
由于我是使用达梦迁移工具将原有MySQL的数据库迁移到达梦数据库,默认是迁移到DBO模式下,然而达梦并没有DBO这个用户,导致连接不上。创建同名的用户和模式后问题就解决了。
4.2.找不到对应的表或字段
数据库连接问题解决后,可以通过WebAPI接口对增删改查操作进行测试了,然而执行后却发现“表xxx不存在”。数据库连接成功,表却不存在,什么问题?
检查之后发现还是配置的问题,达梦数据库默认是大写的,而之前的代码是连结过MySQL和SQL Server的,表名既有大写字母又有小写字母。两边对应不上自然就找不到表了。
还好ABP框架中可以修改实体与数据库表的映射关系,将映射的表名改为大写即可。
此外也可在安装达梦数据库时选择“是否大小写敏感”为“否”,同样能解决问题。
上图说明了:
-
这个参数通过 case_sensitive 进行设置
-
改参数默认值为Y (即为1 ),也就是敏感(区分大小写)
-
如果要设置为不敏感,通过红色标识字示例的那样,在dminit 时,添加参数设置【case_sensitive=n 】或者【case_sensitive=0 】即可(参数名字大写或者小写都可以)。
4.3 达梦数据库使用dapper修改
带参数的使用 : 其他数据库大部分使用的是@
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!