尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

.net core 2.1 mysql 8.0 迁移到 达梦8.4

.net core 2.1 mysql 8.0 迁移到 达梦8.4
📅 发布时间:2026/6/19 8:16:00

数据准备:mysql 数据 已经成功迁移到达梦数据库里。如果用不习惯达梦管理工具,可以用 Navicat Premium 17 ,可以连接到达梦数据库。

1、达梦官网下载.net core 2.1 对应的驱动。本地尝试NuGet 包管理器 版本总是对不好(可能是我的问题),不好使,推荐官网下载找到对应的core 2.1版本直接引用dll ,下载地址:产品下载 - 武汉达梦数据库股份有限公司

image

2、代码添加dll引用 DM.DmProvider.dll,DM.Microsoft.EntityFrameworkCore.dll

image

image

image

 

 3、配置达梦数据库

1、appsettings.json 更改配置(注意:ip端口分开写,COMPATIBLE_MODE≠4,改为MySQL,可能是版本不同写4会报错)
"DmConnection": "Server=Ip;Port=5236;Database=DEMO;Uid=SYSDBA;Pwd=Pwd;COMPATIBLE_MODE=MySQL;",2、opt.UseMySql 改为 opt.UseDm
services.AddDbContext<dmContext>(opt => {            
opt.UseDm(AppSetting.GetSettingString("AppSettings:Dm:DmSqlConnection")); });3、dmContext 修改映射 TestDM 为测试实体public class TestDM{public string EventId { get; set; } public string EventName { get; set; }public DateTime CreateTime { get; set; }}public partial class dmContext : DbContext {public virtual DbSet<TestDM> TestDM { get; set; }private readonly string _connectionString;public dmContext(string connectionString){_connectionString = connectionString;}public dmContext(DbContextOptions<dmContext> options): base(options){}protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder){if (!optionsBuilder.IsConfigured){//切换达梦数据库 optionsBuilder.UseDm(_connectionString);}}protected override void OnModelCreating(ModelBuilder modelBuilder){modelBuilder.Entity<TestDM>(entity =>{entity.ToTable("TESTDM", "DEMO");// 1. 若EventId是主键entity.HasKey(e => e.EventId);// 2. 显式配置字段类型为VARCHAR(达梦兼容),指定长度(必须)entity.Property(e => e.EventId).HasColumnName("EventId").HasColumnType("VARCHAR") // 达梦字符串核心类型.HasMaxLength(50) // 必须指定长度,避免驱动默认无长度报错.IsUnicode(false); // 非Unicode(若无需中文,提升性能);若需中文则设为true(对应NVARCHAR)entity.Property(e => e.EventName).HasColumnName("EventName").HasColumnType("VARCHAR") // 达梦字符串核心类型.HasMaxLength(200); // 必须指定长度,避免驱动默认无长度报错entity.Property(e => e.CreateTime).HasColumnName("CreateTime").HasColumnType("DATE"); // 达梦字符串核心类型});}}

4、测试达梦数据库增删改查(先用原生ADO.NET测试,测通后改用 EF Core ORM框架,注意:EF Core的映射)

   public static async Task<bool> TestDM(){bool bResult = false;string connStr = "Server=IP;Port=5236;Database=DEMO;Uid=SYSDBA;Pwd=Pwd;COMPATIBLE_MODE=MySQL;";var dmBuilder = new DmConnectionStringBuilder();dmBuilder.ConnectionString = connStr; // 触发解析Console.WriteLine("✅ 连接字符串解析成功!");using (var conn = new DmConnection(connStr)){try{// 打开连接await conn.OpenAsync();Console.WriteLine($"连接状态:{conn.State}");Console.WriteLine("✅ 达梦原生驱动连接成功!");// 执行简单SQL验证(查询数据库版本)//using (var cmd = new DmCommand("SELECT SVR_VERSION FROM V$INSTANCE;", conn))//{//    var version = await cmd.ExecuteScalarAsync();//    Console.WriteLine($"📌 达梦数据库版本:{version}");//}// 先用原生ADO.NET 测试查询表using (var cmd = new DmCommand("SELECT * FROM DEMO.TESTDM", conn)){using (var reader = await cmd.ExecuteReaderAsync()){var testDmList = new List<TestDM>();while (await reader.ReadAsync()){var testDm = MapToEntity<TestDM>(reader);testDmList.Add(testDm);}}}//如果原生ADO.NET 没问题后 在EF Core框架测试using (dmContext db = new dmContext()){var evt = new TestDM{//EventId = "001",EventName = "修复测试",CreateTime = DateTime.UtcNow};db.TestDM.Add(evt);var result = await db.TestDM.FirstOrDefaultAsync();if (result != null) {result.EventName = "修改后名字";db.SaveChangesAsync();}Console.WriteLine($"修复成功:{result}");        
               }}catch (Exception ex){Console.WriteLine($"❌ 连接失败:{ex.Message}");// 打印详细错误(排查用)if (ex.InnerException != null){Console.WriteLine($"🔍 内部错误:{ex.InnerException.Message}");}}finally{if (conn.State == ConnectionState.Open){conn.Close();}}}return bResult;}public static T MapToEntity<T>(DbDataReader reader) where T : new(){var entity = new T();var properties = typeof(T).GetProperties(); // 获取实体所有属性foreach (var prop in properties){var ordinal = reader.GetOrdinal(prop.Name); // 按属性名找字段索引if (!reader.IsDBNull(ordinal)){// 转换类型并赋值(适配常见类型)var value = reader.GetValue(ordinal);prop.SetValue(entity, Convert.ChangeType(value, prop.PropertyType));}}return entity;}

 

落座船头,看风起云涌,赏繁花似锦

相关新闻

  • MySQL 存储过程事务和锁
  • 你可能需要一部 Iphone
  • 基于PSO粒子群优化的能源供应方,光伏发电,EV充电三方交易策略博弈算法matlab仿真

最新新闻

  • 大连线下首饰回收门店测评,连锁品牌优势盘点 - 讯息早知道
  • 如何微调GuangxiAICC/swinv2-tiny-patch4-window16-256:自定义数据集训练完整指南
  • 老板娘学财税,找纯培训机构还是找懂实战的财税公司更好?| 五维对比 - 欢欢在创业
  • CANN/Ascend C浮点转BF16函数
  • 2026万国手表回收避雷手册,助力上海表主避开回收行业各类常见猫腻 - 奢品小当家
  • 天农凤中皇常见问题解答(2026专家版) - 速递信息

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号