tbf/TBF/DB.cs

68 lines
2.2 KiB
C#
Raw Normal View History

///
/// Copyright (c) 2021 Sensus Slovensko a.s.
///
using System;
using NHibernate;
using Common;
using Config;
using Users.Entities;
namespace TBF
{
public class DB
{
///
/// Database related: This object reference is set after a successful user login
///
public static DatabaseSettings CurrentBench;
/// <summary>
/// Session factories for regular sessions.
/// </summary>
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();
}
/// <summary>
/// NHibernate session factory (to create the database session 'SessionFactory')
/// </summary>
/// <returns>A database session</returns>
static ISessionFactory CreateSessionFactory(DBKind database)
{
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);
}
}
}