using Microsoft.EntityFrameworkCore; using MySqlConnector; using NLog; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MagMan.Data.Tenant { public static class DbConfig { #region Public Fields public static string DATABASE_NAME = "MagMan_000000"; public static int DATABASE_PROCESS_TIMEOUT = 5; public static string DATABASE_PWD = "viad@nte16!"; public static string DATABASE_SERV = "127.0.0.1"; public static string DATABASE_USER = "MagMan_DbUser"; #endregion Public Fields #region Public Properties /// /// DB Connection string /// public static string CONNECTION_STRING { get; set; } = ""; #endregion Public Properties #region Public Methods public static ServerVersion CustomAutoDetect(string connectionString) { #if false using var connection = new MySqlConnection( new MySqlConnectionStringBuilder(connectionString) { Database = string.Empty, // AutoEnlist = false, Pooling = false, }.ConnectionString); #endif using var connection = new MySqlConnection(connectionString); connection.Open(); ServerVersion currVers = ServerVersion.Parse(connection.ServerVersion); return currVers; } public static string CustomerConnString(string server, int nKey) { string dbName = $"MagMan_{nKey:000000}"; return $"server={server};port=3306;database={dbName};uid={DATABASE_USER};pwd={DATABASE_PWD};sslmode=None;Connection Lifetime=60;Connection Timeout=15;DefaultCommandTimeout=30;ConnectionIdleTimeout=30;ConnectionLifeTime=300;"; //LoadBalance=RoundRobin;Pooling=true; } public static bool ExecMigrationMain(string connString) { // esecuzione migrazione var migrateTask = Task.Run(async () => await DbAdmin.migrateDbMain(connString)); migrateTask.Wait(); return migrateTask.Result; } public static void InitDb(string server, int nKey) { DATABASE_SERV = server; DATABASE_NAME = $"MagMan_{nKey:000000}"; CONNECTION_STRING = $"server={DATABASE_SERV};port=3306;database={DATABASE_NAME};uid={DATABASE_USER};pwd={DATABASE_PWD};sslmode=None;Connection Lifetime=60;Connection Timeout=15;DefaultCommandTimeout=30;ConnectionIdleTimeout=30;ConnectionLifeTime=300;"; //LoadBalance=RoundRobin;Pooling=true; } public static ServerVersion MysqlServerVersion(string connString) { // fix come da https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/issues/1859 //Log.Info($"MysqlServerVersion | {connString}"); //ServerVersion serverVersion = ServerVersion.Parse("10.11.13-MariaDB"); ServerVersion serverVersion = ServerVersion.Parse("10.5.25-mysql"); bool versOk = false; try { serverVersion = ServerVersion.AutoDetect(connString); versOk = true; } catch (Exception exc) { Log.Error($"Eccezione in verifica versione server ServerVersion.AutoDetect: {Environment.NewLine}{exc}"); } if (!versOk) { try { serverVersion = CustomAutoDetect(connString); versOk = true; } catch (Exception exc) { Log.Error($"Eccezione in verifica versione server CustomAutoDetect: {Environment.NewLine}{exc}"); } } return serverVersion; } #endregion Public Methods #region Private Fields private static Logger Log = LogManager.GetCurrentClassLogger(); #endregion Private Fields } }