diff options
| author | Lucas Faria Mendes <lucas.fariamo08@gmail.com> | 2026-03-30 13:38:18 +0000 |
|---|---|---|
| committer | Lucas Faria Mendes <lucas.fariamo08@gmail.com> | 2026-03-30 13:38:18 +0000 |
| commit | 1f4e14b2e973ee7de337fd4866d9a5ceff5cb6d1 (patch) | |
| tree | e1c3b20ea08f0cf71122a1e73f0d395f8fd83874 /Codemerx/Gestor.Infrastructure/Gestor.Infrastructure.Configuration/SessionFactory.cs | |
| parent | 674ca83ba9243a9e95a7568c797668dab6aee26a (diff) | |
| download | gestor-1f4e14b2e973ee7de337fd4866d9a5ceff5cb6d1.tar.gz gestor-1f4e14b2e973ee7de337fd4866d9a5ceff5cb6d1.zip | |
chore: location
Diffstat (limited to 'Codemerx/Gestor.Infrastructure/Gestor.Infrastructure.Configuration/SessionFactory.cs')
| -rw-r--r-- | Codemerx/Gestor.Infrastructure/Gestor.Infrastructure.Configuration/SessionFactory.cs | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/Codemerx/Gestor.Infrastructure/Gestor.Infrastructure.Configuration/SessionFactory.cs b/Codemerx/Gestor.Infrastructure/Gestor.Infrastructure.Configuration/SessionFactory.cs new file mode 100644 index 0000000..236c026 --- /dev/null +++ b/Codemerx/Gestor.Infrastructure/Gestor.Infrastructure.Configuration/SessionFactory.cs @@ -0,0 +1,144 @@ +using FluentNHibernate.Cfg;
+using FluentNHibernate.Cfg.Db;
+using Gestor.Infrastructure.Entities.Seguros;
+using NHibernate;
+using NHibernate.Cfg;
+using NHibernate.Connection;
+using NHibernate.Impl;
+using NHibernate.Mapping;
+using NHibernate.Tool.hbm2ddl;
+using System;
+using System.ComponentModel;
+using System.Data.SqlClient;
+using System.Linq;
+using System.Runtime.CompilerServices;
+
+namespace Gestor.Infrastructure.Configuration
+{
+ public class SessionFactory
+ {
+ private static ISessionFactory _sessionFactory;
+
+ private static string ConnectionString
+ {
+ get;
+ set;
+ }
+
+ public static bool Retry
+ {
+ get;
+ set;
+ }
+
+ private static ISessionFactory Session
+ {
+ get
+ {
+ object connection;
+ SessionFactoryImpl sessionFactoryImpl = SessionFactory._sessionFactory as SessionFactoryImpl;
+ if (sessionFactoryImpl != null)
+ {
+ connection = sessionFactoryImpl.ConnectionProvider.GetConnection();
+ }
+ else
+ {
+ connection = null;
+ }
+ SqlConnection sqlConnection = connection as SqlConnection;
+ SqlConnection sqlConnection1 = new SqlConnection(SessionFactory.ConnectionString);
+ if (sqlConnection == null || sqlConnection.Database != sqlConnection1.Database)
+ {
+ SessionFactory.Initialize();
+ }
+ sqlConnection1.Dispose();
+ return SessionFactory._sessionFactory;
+ }
+ }
+
+ public SessionFactory()
+ {
+ }
+
+ private static NHibernate.Cfg.Configuration BuildConfiguration()
+ {
+ MsSqlConfiguration msSqlConfiguration = MsSqlConfiguration.MsSql2012.ConnectionString(SessionFactory.ConnectionString).ShowSql();
+ return Fluently.Configure().Database(msSqlConfiguration).Mappings((MappingConfiguration m) => m.FluentMappings.AddFromAssemblyOf<ClienteMap>()).ExposeConfiguration((NHibernate.Cfg.Configuration cfg) => (new SchemaUpdate(cfg)).Execute(false, true)).BuildConfiguration();
+ }
+
+ private static void BuildSessionFactory(bool withDelete = false)
+ {
+ SessionFactory._sessionFactory = SessionFactory.ConfigurationFile(withDelete).BuildSessionFactory();
+ }
+
+ private static FluentConfiguration ConfigurationFile(bool withDelete)
+ {
+ NHibernate.Cfg.Configuration configuration;
+ ConfigurationFileCache configurationFileCache = new ConfigurationFileCache(SessionFactory.ConnectionString);
+ if (withDelete)
+ {
+ configurationFileCache.DeleteCacheFile();
+ }
+ NHibernate.Cfg.Configuration configuration1 = configurationFileCache.LoadConfigurationFromFile();
+ configuration1 = SessionFactory.FixConfiguration(configuration1);
+ if (configuration1 != null)
+ {
+ configuration = configuration1;
+ configuration.SetProperty("connection.connection_string", SessionFactory.ConnectionString);
+ }
+ else
+ {
+ configuration = SessionFactory.BuildConfiguration();
+ configurationFileCache.SaveConfigurationToFile(configuration);
+ }
+ return Fluently.Configure(configuration);
+ }
+
+ private static NHibernate.Cfg.Configuration FixConfiguration(NHibernate.Cfg.Configuration cachedConfiguration)
+ {
+ NHibernate.Cfg.Configuration configuration;
+ if (cachedConfiguration == null)
+ {
+ return cachedConfiguration;
+ }
+ Type type = typeof(ClienteDb);
+ if (cachedConfiguration.ClassMappings.Any<PersistentClass>((PersistentClass x) => x.EntityName == type.FullName))
+ {
+ configuration = cachedConfiguration;
+ }
+ else
+ {
+ configuration = null;
+ }
+ cachedConfiguration = configuration;
+ return cachedConfiguration;
+ }
+
+ public static void Initialize()
+ {
+ if (SessionFactory.ConnectionString == null)
+ {
+ throw new ArgumentNullException();
+ }
+ try
+ {
+ SessionFactory.BuildSessionFactory(false);
+ }
+ catch (Exception exception)
+ {
+ SessionFactory.BuildSessionFactory(true);
+ }
+ }
+
+ public static ISession OpenSession(string connectionString)
+ {
+ SessionFactory.ConnectionString = connectionString;
+ ISessionFactory session = SessionFactory.Session;
+ if (session != null)
+ {
+ return session.OpenSession();
+ }
+ return null;
+ }
+ }
+}
\ No newline at end of file |