/// /// Copyright (c) 2017 Sensus Metering Systems /// using System; using System.Collections.Generic; using FluentNHibernate.Cfg; using FluentNHibernate.Cfg.Db; using log4net; using NHibernate; using NHibernate.Cfg; using NHibernate.Tool.hbm2ddl; using Results.Entities; namespace Results { public class DBase { static readonly ILog log = LogManager.GetLogger(typeof(DBase)); /// Session factory for all regular sessions, not for CreateEmptyResultsDB(). public static IList Databases; public static int Count { get { return Databases.Count; } } static DBase() { Databases = new List(); } public readonly string Name; public readonly string ConnectionString; ISessionFactory sessionFactory; public DBase(string connectionString, string name) { this.ConnectionString = connectionString; this.Name = name; sessionFactory = Fluently.Configure() .Database(MySQLConfiguration.Standard.ConnectionString(connectionString)) .Mappings(m => m.FluentMappings.AddFromAssemblyOf()) .ExposeConfiguration(BuildSchema) .BuildConfiguration() .SetProperty("hibernate.connection.connect_timeout", Common.Const.MySqlConnectTimeoutSec) .BuildSessionFactory(); } public DBase(string connectionString) : this(connectionString, string.Empty) { } private void BuildSchema(Configuration config) { /// This NHibernate tool takes a configuration with mapping info and exports a database schema new SchemaExport(config).SetOutputFile("db_schema"); } public ISession OpenSession() { return sessionFactory.OpenSession(); } } }