Files
magman/MagMan.Data.Tenant/DbConfig.cs
T

113 lines
4.0 KiB
C#

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
/// <summary>
/// DB Connection string
/// </summary>
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
}
}