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

Abp Vnext 数据库由SQL server切换MySQL

切换MySQL细节注意事项:

1、appsettings.json配置MySQL版本号

    "ConnectionStrings": {"Default": "Server=172.16.34.14\\SQL2014; Database=Diw.MES.PlantDataService;Persist Security Info=True;User ID=webuser;Password=Sesam123!;TrustServerCertificate=True","SIMDataService": "Data Source=127.0.0.1;port=3306;Initial Catalog=Diw.MES.SIMDataService;user ID=root;password=root;charset=utf8mb4;Allow User Variables=True;ConnectionReset=True;AllowLoadLocalInfile=true;"},"MySqlVersion": "8.4.0","BulkExtensions": {"Enable": true},

2、***DbContextFactory调整代码:

/// <summary>
/// 解析MySQL版本(带容错处理)
/// </summary>
private static MySqlServerVersion GetMySqlServerVersion(IConfiguration configuration)
{try{// 从配置读取,默认8.0.29string versionStr = configuration["MySqlVersion"] ?? "8.0.29";var versionParts = versionStr.Split('.').Select(p => int.TryParse(p.Trim(), out int num) ? num : 0).ToArray();// 确保版本号至少包含主、次版本int major = versionParts.Length > 0 ? versionParts[0] : 8;int minor = versionParts.Length > 1 ? versionParts[1] : 0;int build = versionParts.Length > 2 ? versionParts[2] : 0;return new MySqlServerVersion(new Version(major, minor, build));}catch (Exception ex){Console.WriteLine($"警告:MySQL版本解析失败,使用默认版本 8.0.29。错误:{ex.Message}");return new MySqlServerVersion(new Version(8, 0, 29));}
}

3、***Module.cs调整代码

using System;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using ShardingCore;
using SPC.SIMDataService.VirtualTableRoutes;
using Volo.Abp;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.Modularity;
namespace SPC.SIMDataService.EntityFrameworkCore;[DependsOn(typeof(SIMDataServiceDomainModule),typeof(AbpEntityFrameworkCoreModule)
)]
public class SIMDataServiceEntityFrameworkCoreModule : AbpModule
{static SIMDataServiceEntityFrameworkCoreModule(){SIMDataServiceEfCoreEntityExtensionMappings.Configure();}public static readonly ILoggerFactory efLogger = LoggerFactory.Create(builder =>{//builder.AddFilter((category, level) => category == DbLoggerCategory.Database.Command.Name && level == LogLevel.Information).AddConsole();});public override void PreConfigureServices(ServiceConfigurationContext context){SIMDataServiceEfCoreEntityExtensionMappings.Configure();}public override void ConfigureServices(ServiceConfigurationContext context){var configuration = context.Services.GetConfiguration();string connString = configuration.GetConnectionString("SIMDataService")?? throw new ArgumentException("未找到 SIMDataService 连接字符串");var Enable = Convert.ToBoolean(configuration["BulkExtensions:Enable"]);var serverVersion = GetMySqlServerVersion(configuration);context.Services.AddAbpDbContext<SIMDataServiceDbContext>(options =>{options.AddDefaultRepositories(includeAllEntities: true);});if (Enable)context.Services.AddScoped<IEfCoreBulkOperationProvider, BulkExtensionsEfCoreBulkOperationProvider>();Configure<AbpDbContextOptions>(options =>{options.UseMySQL(o =>{o.CommandTimeout(60);});options.Configure<SIMDataServiceDbContext>(innerContext =>{innerContext.DbContextOptions.UseDefaultSharding<SIMDataServiceDbContext>(innerContext.ServiceProvider);});});context.Services.AddShardingConfigure<SIMDataServiceDbContext>().UseRouteConfig(op =>{op.AddShardingTableRoute<ShiftDataVirtualTableRoute>();}).UseConfig((sp, op) =>{op.UseShardingQuery((conStr, builder) =>{builder.UseMySql(conStr, serverVersion).UseLoggerFactory(efLogger);});op.UseShardingTransaction((connection, builder) =>{builder.UseMySql(connection, serverVersion).UseLoggerFactory(efLogger);});op.UseShardingMigrationConfigure(builder =>{builder.ReplaceService<IMigrationsSqlGenerator, ShardingMySqlMigrationsSqlGenerator>();});op.AddDefaultDataSource("SIMDataService", connString);}).AddShardingCore();}public override void OnPostApplicationInitialization(ApplicationInitializationContext context){base.OnPostApplicationInitialization(context);//创建表的定时任务如果有按年月日系统默认路由的需要系统创建的记得开起来//context.ServiceProvider.UseAutoShardingCreate();//补偿表 //自动迁移的话不需要//context.ServiceProvider.UseAutoTryCompensateTable();}/// <summary>/// 解析MySQL版本(带容错处理)/// </summary>private static MySqlServerVersion GetMySqlServerVersion(IConfiguration configuration){try{// 从配置读取,默认8.0.29string versionStr = configuration["MySqlVersion"] ?? "8.0.29";var versionParts = versionStr.Split('.').Select(p => int.TryParse(p.Trim(), out int num) ? num : 0).ToArray();// 确保版本号至少包含主、次版本int major = versionParts.Length > 0 ? versionParts[0] : 8;int minor = versionParts.Length > 1 ? versionParts[1] : 0;int build = versionParts.Length > 2 ? versionParts[2] : 0;return new MySqlServerVersion(new Version(major, minor, build));}catch (Exception ex){Console.WriteLine($"警告:MySQL版本解析失败,使用默认版本 8.0.29。错误:{ex.Message}");return new MySqlServerVersion(new Version(8, 0, 29));}}}

4、***MigrationsSqlGenerator调整

using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Update;
using ShardingCore.Core.RuntimeContexts;
using ShardingCore.Helpers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Pomelo.EntityFrameworkCore.MySql.Migrations;
using Pomelo.EntityFrameworkCore.MySql.Infrastructure.Internal;namespace SPC.SIMDataService
{public class ShardingMySqlMigrationsSqlGenerator : MySqlMigrationsSqlGenerator{private readonly IShardingRuntimeContext _shardingRuntimeContext;public ShardingMySqlMigrationsSqlGenerator(IShardingRuntimeContext shardingRuntimeContext,MigrationsSqlGeneratorDependencies dependencies,ICommandBatchPreparer commandBatchPreparer,IMySqlOptions options) :base(dependencies,commandBatchPreparer,options){_shardingRuntimeContext = shardingRuntimeContext;}protected override void Generate(MigrationOperation operation,IModel model,MigrationCommandListBuilder builder){var oldCmds = builder.GetCommandList().ToList();base.Generate(operation, model, builder);var newCmds = builder.GetCommandList().ToList();var addCmds = newCmds.Where(x => !oldCmds.Contains(x)).ToList();MigrationHelper.Generate(_shardingRuntimeContext,operation,builder,Dependencies.SqlGenerationHelper,addCmds);}}
}

6、Hangfire与MySQL 新的组件(Hangfire.MySqlStorage)

 #region Hangfire与MySQLstring connString = configuration.GetConnectionString("Hangfire")?? throw new ArgumentException("未找到Hangfire连接字符串");context.Services.AddHangfire(config =>{config.SetDataCompatibilityLevel(CompatibilityLevel.Version_180).UseSimpleAssemblyNameTypeSerializer().UseRecommendedSerializerSettings();config.UseStorage(new MySqlStorage(connString, new MySqlStorageOptions()));});context.Services.AddHangfireServer();context.Services.AddTransient<IBackgroundJobClient, BackgroundJobClient>();#endregion

http://www.dtcms.com/a/391333.html

相关文章:

  • Linux嵌入式自学笔记(基于野火EBF6ULL):4.gcc
  • Mellanox网卡寄存器PPCC
  • [vibe code追踪] 应用状态管理 | 交互式点击 | 共享白板
  • SG-TCP232-110 单通道串口服务器,一键实现串口与以太网双向转换
  • 零基础入门神经网络:从数学公式到通俗理解
  • 坤驰科技诚邀您参加——第十三届中国光纤传大会
  • 如何找到高质量的Java项目教程?
  • 无声的战场:AUTOSAR AP日志里的谍影重重(1)
  • ThinkPHP在使用nginx反向代理后如何获取真实的Ip地址
  • LeetCode 分类刷题:2439. 最小化数组中的最大值
  • Git最佳实践(Golang示例项目)
  • 20250919在荣品RD-RK3588-MID开发板的Android13系统下使用TF卡刷机解决竖屏横用的时候的竖屏提示的问题
  • Makefile学习(三)- CFLAGS和LDFLAGS
  • React 新闻发布系统 NewSandBox侧边栏与顶部栏布局
  • ppt视频极致压缩参数
  • 49.Mysql多实例部署
  • java 上传文件和下载/预览文件 包括音频调进度条
  • 部署你的 Next.js 应用:Vercel、Netlify 和自托管选项
  • 从产品经理视角:小智AI的产品介绍与分析
  • 解决:导包红色波浪线但正常运行及其后续问题
  • webrtc弱网-LinkCapacityEstimator类源码分析与算法原理
  • vue el-autocomplete输入框自动匹配优化,建议项按高度相似降序
  • 十分钟了解@Version注解
  • vue3+ts+uniapp H5微信小程序app有截止日期的日期date-pcicker组件
  • 设计模式-观察者模式详解
  • centos7--安装海量数据库Vastbase M100
  • Apache Commons DBCP连接池生产环境配置推荐
  • 【11/20】实时数据基础:WebSocket 在 Express 和 Vue 中的整合,实现简单聊天功能
  • 五传输层-TCP UDP慢启动-真题
  • ARM基础知识