private ISessionFactory GenerateNHibernateSessionFactory() { var sw = Stopwatch.StartNew(); ForceLoadObjectModel(); // This is needed for "new Configuration()". var configuration = new global::NHibernate.Cfg.Configuration(); configuration.SetProperty("connection.provider", "NHibernate.Connection.DriverConnectionProvider"); configuration.SetProperty("connection.connection_string", _connectionString); // Set factory-level property: configuration.SetProperty("command_timeout", SqlUtility.SqlCommandTimeout.ToString()); // Set system-level property: // Note: Using NHibernate.Cfg.Environment.Properties does not allow setting properties becase the public property returns a copy of the dictionary. var globalPropertiesField = typeof(global::NHibernate.Cfg.Environment).GetField("GlobalProperties", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static); var globalProperties = (Dictionary<string, string>)globalPropertiesField.GetValue(null); globalProperties.Add("command_timeout", SqlUtility.SqlCommandTimeout.ToString()); if (SqlUtility.DatabaseLanguage == "MsSql") { configuration.SetProperty("dialect", "NHibernate.Dialect.MsSql2005Dialect"); configuration.SetProperty("connection.driver_class", "NHibernate.Driver.SqlClientDriver"); } else if (SqlUtility.DatabaseLanguage == "Oracle") { configuration.SetProperty("dialect", "NHibernate.Dialect.Oracle10gDialect"); configuration.SetProperty("connection.driver_class", "NHibernate.Driver.OracleDataClientDriver"); } else throw new FrameworkException(DatabaseLanguageError); ResolveEventHandler resolveAssembly = (s, args) => _domainObjectModel.Assembly; try { AppDomain.CurrentDomain.AssemblyResolve += resolveAssembly; configuration.AddXmlString(_nHibernateMapping.GetMapping()); } finally { AppDomain.CurrentDomain.AssemblyResolve -= resolveAssembly; } foreach (var configurationExtension in _nHibernateConfigurationExtensions) configurationExtension.ExtendConfiguration(configuration); SchemaMetadataUpdater.QuoteTableAndColumns(configuration); var sessionFactory = configuration.BuildSessionFactory(); _performanceLogger.Write(sw, "NHibernatePersistenceEngine.PrepareNHSessionFactory"); return sessionFactory; }