///
/// Copyright (c) 2021 Sensus Slovensko a.s.
///
using System;
using NHibernate;
using Common;
namespace TBF
{
public class DB
{
///
/// Database related: This object reference is set after a successful user login
///
public static DatabaseSettings CurrentBench;
///
/// Session factories for regular sessions.
///
public static ISessionFactory[] SessionFactories = new ISessionFactory[(int)DBKind.Count];
/// Create a NHibernate session for the given database
public static ISession CreateSession(DBKind database)
{
if (database < 0 || database >= DBKind.Count) return null;
int ix = (int)database;
if (SessionFactories[ix] == null)
{
SessionFactories[ix] = CreateSessionFactory(database);
}
return SessionFactories[ix].OpenSession();
}
///
/// NHibernate session factory (to create the database session 'SessionFactory')
///
/// A database session
static ISessionFactory CreateSessionFactory(DBKind database)
{
Common.DBType dbType;
string connectionString;
switch (database)
{
default:
case DBKind.Config:
dbType = CurrentBench.ProceduresDBSettings.DbType;
connectionString = CurrentBench.ProceduresDBSettings.ConnectionString;
break;
case DBKind.Results:
dbType = CurrentBench.WaterMetersDBSettings.DbType;
connectionString = CurrentBench.WaterMetersDBSettings.ConnectionString;
break;
case DBKind.RemoteConfig:
dbType = CurrentBench.UsersDBSettings.DbType;
connectionString = CurrentBench.UsersDBSettings.ConnectionString;
break;
}
return Config.FluentCommon.CreateSessionFactory(database, dbType, connectionString, false);
}
}
}