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.Admin { public static class DbConfig { #region Public Fields public static string DATABASE_NAME = "MagMan_Admin"; 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 per azioni amministrative /// public static string ADMIN_CONNECTION_STRING { get; set; } = ""; /// /// DB Connection string /// public static string CONNECTION_STRING { get; set; } = ""; #endregion Public Properties #region Public Methods public static bool CheckCustDb(int masterKey) { // esecuzione script di install locale return DbAdmin.CheckCreateCustDb(masterKey); } public static bool CheckUser(string nKey, string sKey) { // esecuzione script di install locale return DbAdmin.CheckCreateUser(DATABASE_USER, DATABASE_PWD, DATABASE_NAME); } 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 bool ExecMigrationIdentity() { // esecuzione migrazione var migrateTask = Task.Run(async () => await DbAdmin.MigrateDbIdentity()); migrateTask.Wait(); return migrateTask.Result; } public static bool ExecMigrationMultiTenant() { // esecuzione migrazione var migrateTask = Task.Run(async () => await DbAdmin.MigrateDbMultiTenant()); migrateTask.Wait(); return migrateTask.Result; } public static void InitDb(string server) { DATABASE_SERV = server; // tutto fisso x gestione utenti 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;"; // stringa admin con utente admin dell'applicazione (già creato)... ADMIN_CONNECTION_STRING = $"Server={DATABASE_SERV};port=3306;database=mysql;uid=egalware;pwd=Egalware_24068!;sslmode=None;Connection Lifetime=60;Connection Timeout=15;DefaultCommandTimeout=30;ConnectionIdleTimeout=30;ConnectionLifeTime=300;"; } 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 } }