using Microsoft.EntityFrameworkCore; using Pomelo.EntityFrameworkCore.MySql.Infrastructure; namespace Rmsys.Infrastructure; /// 数据库配置(连接串可用环境变量 RMSYS_MYSQL 覆盖) public static class DbConfig { /// /// 默认连接串。注意: /// · CharSet=utf8mb4 —— 服务端默认 latin1,必须显式指定,否则中文乱码 /// · 口令含 # @ ! 等特殊字符,用单引号包裹 /// · MySQL 5.7.25,SslMode=None(内网) /// public const string DefaultMySql = // 兜底默认值(本地安装形态):真实环境由 appsettings.json 或 RMSYS_MYSQL 覆盖, // 这里不写任何真实服务器与口令,避免口令随二进制外流。 "server=127.0.0.1;port=3307;database=rmsys;user=rmsys;password='';" + "CharSet=utf8mb4;SslMode=None;AllowPublicKeyRetrieval=true;" + // 连接池与超时:显式设定,避免默认值在会议高峰期(多人同时导出/上传)耗尽连接 "ConnectionTimeout=10;DefaultCommandTimeout=30;" + "MinimumPoolSize=2;MaximumPoolSize=40;ConnectionIdleTimeout=60;ConnectionLifeTime=300"; public static string MySql => Environment.GetEnvironmentVariable("RMSYS_MYSQL") ?? DefaultMySql; /// 服务端实测版本 MySQL 5.7.25(显式指定,避免 AutoDetect 需要联网探测) public static MySqlServerVersion ServerVersion => new(new Version(5, 7, 25)); } /// 供 EF Core CLI(dotnet ef)在设计时创建上下文 public class RmsysDbContextFactory : Microsoft.EntityFrameworkCore.Design.IDesignTimeDbContextFactory { public RmsysDbContext CreateDbContext(string[] args) { var options = new DbContextOptionsBuilder() .UseMySql(DbConfig.MySql, DbConfig.ServerVersion) .Options; return new RmsysDbContext(options); } }