/// /// 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); } } }