在要求输入邮箱的文本域,请填写真实的邮件地址。非真实邮件地址,将收不到回复信息。

ABP集成达梦数据库

DotNet 清风 46℃ 0评论
ABP集成达梦数据库-第0张图片

背景

因客户国产化需求,需要将数据库改为达梦数据库。所以要对现有的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集成达梦数据库

喜欢 (1)or分享 (0)
支付宝扫码打赏 支付宝扫码打赏 微信打赏 微信打赏
头像
发表我的评论
取消评论

CAPTCHA Image
Reload Image
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址