当前位置: 首页 > news >正文

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

数据准备: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;}

 

http://www.jsqmd.com/news/54502/

相关文章:

  • 电脑中显存和内存区别?
  • MySQL 存储过程事务和锁
  • 你可能需要一部 Iphone
  • LAUNCH X431 PRO3 V+ ELITE: 10.1 Touchscreen, SmartLink 2.0, Full CAN 2.0/CANFD/DoIP/J2534 Support
  • 2025 Yanhua Mini ACDP-2 Module 38: Efficient BMW G Series BDC2 Immobilizer Key Adding Tool
  • 老六的字符串
  • 基于PSO粒子群优化的能源供应方,光伏发电,EV充电三方交易策略博弈算法matlab仿真
  • 神奇的字符
  • mysql 迁移 达梦8.4
  • 2025 CGDI A2 Key Programmer Premium: BMW G Series IMMO, WiFi, No Annual Fee
  • 基于YALMIP和cplex工具箱的微电网最优调度算法matlab仿真
  • HW
  • Day5-20251128
  • pycharm中运行自动化脚本时没有反应
  • 问卷发了1000份,收回全是正确的废话?你少了一个读心指令
  • 2025 Magic Motorsport Magic FLK02 ECU TCU Programmer: Lifetime Warranty Full HW Kit for New Users
  • 2025 New OBDSTAR MQB All Keys Lost Adapter Kit: Airbag Reset, IMMO, Dashboard, BCM, ELV
  • 图片隐写
  • elasticsearch数据同步到hive
  • 11.17-11.28综合练习
  • AI元人文:牛车新说
  • 根据负载功率及距离计算导线截面积 - 何苦
  • 为什么池化技术是每个后端都必备的技能? - 智慧园区
  • 2025贴片石厂家推荐?贴片石厂家权威榜单
  • 揭秘金拓螺旋机厂家-螺旋式提升机核心供应商,高效稳定
  • 2025智能门锁厂家推荐综合榜单
  • 20232419 2025-2026-1 《网络与系统攻防技术》实验七实验报告
  • 2025成都隔音窗厂家哪家好?优质隔音窗厂家清单请收好
  • 2025高压隔膜泵/电动隔膜泵厂家口碑榜
  • 2025浙江苗木绿化公司/绿化苗木供应商推荐综合榜单