public static void NHibernateConfiguration(TestContext context) { log4net.Config.XmlConfigurator.Configure(); Configuration = new Configuration(); // lendo o arquivo hibernate.cfg.xml Configuration.Configure(); FilterDefinition filterDef = new FilterDefinition( "Empresa","EMPRESA = :EMPRESA", new Dictionary<string, IType>() {{"EMPRESA", NHibernateUtil.Int32}}, false); Configuration.AddFilterDefinition(filterDef); filterDef = new FilterDefinition( "Ativa", "ATIVO = 'Y'", new Dictionary<string, IType>(), false); Configuration.AddFilterDefinition(filterDef); // Mapeamento por código var mapper = new ModelMapper(); mapper.AddMappings(Assembly.GetExecutingAssembly().GetExportedTypes()); HbmMapping mapping = mapper.CompileMappingForAllExplicitlyAddedEntities(); Configuration.AddMapping(mapping); // Gerar o XML a partir do mapeamento de codigo. //var mappingXMl = mapping.AsString(); // Mapeamento por arquivo, in resource. Configuration.AddAssembly(Assembly.GetExecutingAssembly()); // Gerando o SessionFactory SessionFactory = Configuration.BuildSessionFactory(); }
public ConfigurationFactory(DatabaseSettings settings) { _configuration = new Configuration() .SetInterceptor(new TenantIdInterceptor(settings.TenantId)) .DataBaseIntegration(db => { db.ConnectionString = settings.ConnectionString; db.Dialect<MsSql2012Dialect>(); db.BatchSize = 100; }); _configuration .AddFilterDefinition(new TenantIdDefinition(settings.TenantId)); var mapping = GetMappings(); _configuration.AddDeserializedMapping(mapping, "schema"); SchemaMetadataUpdater.QuoteTableAndColumns(_configuration); new SchemaExport(_configuration).SetOutputFile(@"c:\temp\atxc_schema.ddl").Execute(false, false, false); _sessionFactoryBuilder = _configuration.BuildSessionFactory(); }
public ConfigurationFactory(DatabaseSettings settings) { _configuration = new Configuration() .SetInterceptor(new TenantIdInterceptor(settings.TenantId)) .DataBaseIntegration(db => { db.ConnectionString = settings.ConnectionString; db.Dialect <MsSql2012Dialect>(); db.BatchSize = 100; }); _configuration .AddFilterDefinition(new TenantIdDefinition(settings.TenantId)); var mapping = GetMappings(); _configuration.AddDeserializedMapping(mapping, "schema"); SchemaMetadataUpdater.QuoteTableAndColumns(_configuration); new SchemaExport(_configuration).SetOutputFile(@"c:\temp\atxc_schema.ddl").Execute(false, false, false); _sessionFactoryBuilder = _configuration.BuildSessionFactory(); }
public Configuration GetConfiguration() { var config = new Configuration(); string configName = "WebNHibernate.config".ToAbsolute(); config.Configure(configName); var filterDef = new FilterDefinition( cultureFilter, null, // or your default condition new Dictionary<string, IType> {{"cultureId", NHibernateUtil.String}}, false); config.AddFilterDefinition(filterDef); HbmMapping mapping = NHibernateMappingRepository.GetMappings(); config.AddDeserializedMapping(mapping, "NHSchemaTest"); SchemaMetadataUpdater.QuoteTableAndColumns(config); return config; }
/// <summary> /// Initialize the SessionFactory for the given or the /// default location. /// </summary> public virtual void AfterPropertiesSet() { // Create Configuration instance. Configuration config = NewConfiguration(); if (this.dbProvider != null) { config.SetProperty(Environment.ConnectionString, dbProvider.ConnectionString); config.SetProperty(Environment.ConnectionProvider, typeof(DbProviderWrapper).AssemblyQualifiedName); configTimeDbProvider = this.dbProvider; } if (ExposeTransactionAwareSessionFactory) { // Set ICurrentSessionContext implementation, // providing the Spring-managed ISession s current Session. // Can be overridden by a custom value for the corresponding Hibernate property // config.SetProperty(Environment.CurrentSessionContextClass, typeof(SpringSessionContext).AssemblyQualifiedName); config.SetProperty(Environment.CurrentSessionContextClass, typeof(WcfOperationSessionContext).AssemblyQualifiedName); } if (this.entityInterceptor != null) { // Set given entity interceptor at SessionFactory level. config.SetInterceptor(this.entityInterceptor); } if (this.namingStrategy != null) { // Pass given naming strategy to Hibernate Configuration. config.SetNamingStrategy(this.namingStrategy); } if (this.filterDefinitions != null) { // Register specified NHibernate FilterDefinitions. for (int i = 0; i < this.filterDefinitions.Length; i++) { config.AddFilterDefinition(this.filterDefinitions[i]); } } if (this.hibernateProperties != null) { if (config.GetProperty(Environment.ConnectionProvider) != null && hibernateProperties.Contains(Environment.ConnectionProvider)) { #region Logging if (log.IsInfoEnabled) { log.Info("Overriding use of Spring's Hibernate Connection Provider with [" + hibernateProperties[Environment.ConnectionProvider] + "]"); } #endregion config.Properties.Remove(Environment.ConnectionProvider); } Dictionary <string, string> genericHibernateProperties = new Dictionary <string, string>(); foreach (DictionaryEntry entry in hibernateProperties) { genericHibernateProperties.Add((string)entry.Key, (string)entry.Value); } config.AddProperties(genericHibernateProperties); } if (this.mappingAssemblies != null) { foreach (string assemblyName in mappingAssemblies) { config.AddAssembly(assemblyName); } } if (this.mappingResources != null) { IResourceLoader loader = this.ResourceLoader; if (loader == null) { loader = this.applicationContext; } foreach (string resourceName in mappingResources) { config.AddInputStream(loader.GetResource(resourceName).InputStream); } } if (configFilenames != null) { foreach (string configFilename in configFilenames) { config.Configure(configFilename); } } if (this.eventListeners != null) { // Register specified NHibernate event listeners. foreach (DictionaryEntry entry in eventListeners) { ListenerType listenerType; try { listenerType = (ListenerType)Enum.Parse(typeof(ListenerType), (string)entry.Key); } catch { throw new ArgumentException(string.Format("Unable to parse string '{0}' as valid {1}", entry.Key, typeof(ListenerType))); } object listenerObject = entry.Value; if (listenerObject is ICollection) { ICollection listeners = (ICollection)listenerObject; EventListeners listenerRegistry = config.EventListeners; // create the array and check that types are valid at the same time ArrayList items = new ArrayList(listeners); object[] listenerArray = (object[])items.ToArray(listenerRegistry.GetListenerClassFor(listenerType)); config.SetListeners(listenerType, listenerArray); } else { config.SetListener(listenerType, listenerObject); } } } // Perform custom post-processing in subclasses. PostProcessConfiguration(config); // Build SessionFactory instance. log.Info("Building new Hibernate SessionFactory"); this.configuration = config; this.sessionFactory = NewSessionFactory(config); AfterSessionFactoryCreation(); // set config time DB provider back to null configTimeDbProvider = null; }
/// <summary> /// Initialize the SessionFactory for the given or the /// default location. /// </summary> public virtual void AfterPropertiesSet() { // Create Configuration instance. Configuration config = NewConfiguration(); if (this.dbProvider != null) { config.SetProperty(Environment.ConnectionString, dbProvider.ConnectionString); config.SetProperty(Environment.ConnectionProvider, typeof(DbProviderWrapper).AssemblyQualifiedName); configTimeDbProvider = this.dbProvider; } if (ExposeTransactionAwareSessionFactory) { // Set ICurrentSessionContext implementation, // providing the Spring-managed ISession s current Session. // Can be overridden by a custom value for the corresponding Hibernate property config.SetProperty(Environment.CurrentSessionContextClass, typeof(SpringSessionContext).AssemblyQualifiedName); } if (this.entityInterceptor != null) { // Set given entity interceptor at SessionFactory level. config.SetInterceptor(this.entityInterceptor); } if (this.namingStrategy != null) { // Pass given naming strategy to Hibernate Configuration. config.SetNamingStrategy(this.namingStrategy); } #if NH_2_1 if (this.typeDefinitions != null) { // Register specified Hibernate type definitions. IDictionary <string, string> typedProperties = new Dictionary <string, string>(); foreach (DictionaryEntry entry in hibernateProperties) { typedProperties.Add((string)entry.Key, (string)entry.Value); } Dialect dialect = Dialect.GetDialect(typedProperties); Mappings mappings = config.CreateMappings(dialect); for (int i = 0; i < this.typeDefinitions.Length; i++) { IObjectDefinition typeDef = this.typeDefinitions[i]; Dictionary <string, string> typedParamMap = new Dictionary <string, string>(); foreach (DictionaryEntry entry in typeDef.PropertyValues) { typedParamMap.Add((string)entry.Key, (string)entry.Value); } mappings.AddTypeDef(typeDef.ObjectTypeName, typeDef.ObjectTypeName, typedParamMap); } } #endif if (this.filterDefinitions != null) { // Register specified NHibernate FilterDefinitions. for (int i = 0; i < this.filterDefinitions.Length; i++) { config.AddFilterDefinition(this.filterDefinitions[i]); } } #if NH_2_1 // check whether proxy factory has been initialized if (config.GetProperty(Environment.ProxyFactoryFactoryClass) == null && (hibernateProperties == null || !hibernateProperties.Contains(Environment.ProxyFactoryFactoryClass))) { // nothing set by user, lets use Spring.NET's proxy factory factory #region Logging if (log.IsInfoEnabled) { log.Info("Setting proxy factory to Spring provided one as user did not specify any"); } #endregion config.Properties.Add( Environment.ProxyFactoryFactoryClass, typeof(Bytecode.ProxyFactoryFactory).AssemblyQualifiedName); } #endif if (this.hibernateProperties != null) { if (config.GetProperty(Environment.ConnectionProvider) != null && hibernateProperties.Contains(Environment.ConnectionProvider)) { #region Logging if (log.IsInfoEnabled) { log.Info("Overriding use of Spring's Hibernate Connection Provider with [" + hibernateProperties[Environment.ConnectionProvider] + "]"); } #endregion config.Properties.Remove(Environment.ConnectionProvider); } Dictionary <string, string> genericHibernateProperties = new Dictionary <string, string>(); foreach (DictionaryEntry entry in hibernateProperties) { genericHibernateProperties.Add((string)entry.Key, (string)entry.Value); } config.AddProperties(genericHibernateProperties); } if (this.mappingAssemblies != null) { foreach (string assemblyName in mappingAssemblies) { config.AddAssembly(assemblyName); } } if (this.mappingResources != null) { IResourceLoader loader = this.ResourceLoader; if (loader == null) { loader = this.applicationContext; } foreach (string resourceName in mappingResources) { config.AddInputStream(loader.GetResource(resourceName).InputStream); } } if (configFilenames != null) { foreach (string configFilename in configFilenames) { config.Configure(configFilename); } } #if NH_2_1 // Tell Hibernate to eagerly compile the mappings that we registered, // for availability of the mapping information in further processing. PostProcessMappings(config); config.BuildMappings(); if (this.entityCacheStrategies != null) { // Register cache strategies for mapped entities. foreach (string className in this.entityCacheStrategies.Keys) { String[] strategyAndRegion = StringUtils.CommaDelimitedListToStringArray(this.entityCacheStrategies.GetProperty(className)); if (strategyAndRegion.Length > 1) { config.SetCacheConcurrencyStrategy(className, strategyAndRegion[0], strategyAndRegion[1]); } else if (strategyAndRegion.Length > 0) { config.SetCacheConcurrencyStrategy(className, strategyAndRegion[0]); } } } if (this.collectionCacheStrategies != null) { // Register cache strategies for mapped collections. foreach (string collRole in collectionCacheStrategies.Keys) { string[] strategyAndRegion = StringUtils.CommaDelimitedListToStringArray(this.collectionCacheStrategies.GetProperty(collRole)); if (strategyAndRegion.Length > 1) { throw new Exception("Collection cache concurrency strategy region definition not supported yet"); //config.SetCollectionCacheConcurrencyStrategy(collRole, strategyAndRegion[0], strategyAndRegion[1]); } else if (strategyAndRegion.Length > 0) { config.SetCollectionCacheConcurrencyStrategy(collRole, strategyAndRegion[0]); } } } #endif if (this.eventListeners != null) { // Register specified NHibernate event listeners. foreach (DictionaryEntry entry in eventListeners) { ListenerType listenerType; try { listenerType = (ListenerType)Enum.Parse(typeof(ListenerType), (string)entry.Key); } catch { throw new ArgumentException(string.Format("Unable to parse string '{0}' as valid {1}", entry.Key, typeof(ListenerType))); } object listenerObject = entry.Value; if (listenerObject is ICollection) { ICollection listeners = (ICollection)listenerObject; EventListeners listenerRegistry = config.EventListeners; // create the array and check that types are valid at the same time ArrayList items = new ArrayList(listeners); object[] listenerArray = (object[])items.ToArray(listenerRegistry.GetListenerClassFor(listenerType)); config.SetListeners(listenerType, listenerArray); } else { config.SetListener(listenerType, listenerObject); } } } // Perform custom post-processing in subclasses. PostProcessConfiguration(config); #if NH_2_1 if (BytecodeProvider != null) { // set custom IBytecodeProvider Environment.BytecodeProvider = BytecodeProvider; } else { // use Spring's as default // Environment.BytecodeProvider = new Bytecode.BytecodeProvider(this.applicationContext); } #endif // Build SessionFactory instance. log.Info("Building new Hibernate SessionFactory"); this.configuration = config; this.sessionFactory = NewSessionFactory(config); AfterSessionFactoryCreation(); // set config time DB provider back to null configTimeDbProvider = null; }
public NHibernate.Cfg.Configuration Configure() { SetAssemblyBinding(); var configuration = new NHibernate.Cfg.Configuration(); // NOTE: the NHibernate documentation states that this file would be automatically loaded, however in testings this was not the case. // The expectation is that this file will be in the binaries location. configuration.Configure( Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "hibernate.cfg.xml")); // Add the configuration to the container configuration.BeforeBindMapping += Configuration_BeforeBindMapping; // Get all the filter definitions from all the configurators var allFilterDetails = _authorizationStrategyConfigurators .SelectMany(c => c.GetFilters()) .Distinct() .ToList(); // Group the filters by name first (there can only be 1 "default" filter, but flexibility // to apply same filter name with same parameters to different entities should be supported // (and is in fact supported below when filters are applied to individual entity mappings) var allFilterDetailsGroupedByName = allFilterDetails .GroupBy(f => f.FilterDefinition.FilterName) .Select(g => g); // Add all the filter definitions to the NHibernate configuration foreach (var filterDetails in allFilterDetailsGroupedByName) { configuration.AddFilterDefinition( filterDetails.First() .FilterDefinition); } // Configure the mappings var ormMappingFileData = _ormMappingFileDataProvider.OrmMappingFileData(); configuration.AddResources(ormMappingFileData.MappingFileFullNames, ormMappingFileData.Assembly); //Resolve all extension assemblies and add to NHibernate configuration _extensionConfigurationProviders.ForEach( e => configuration.AddResources(e.OrmMappingFileData.MappingFileFullNames, e.OrmMappingFileData.Assembly)); // Invoke configuration activities foreach (var configurationActivity in _configurationActivities) { configurationActivity.Execute(configuration); } // Apply the previously defined filters to the mappings foreach (var mapping in configuration.ClassMappings) { Type entityType = mapping.MappedClass; var properties = entityType.GetProperties(); var applicableFilters = allFilterDetails .Where(filterDetails => filterDetails.ShouldApply(entityType, properties)) .ToList(); foreach (var filter in applicableFilters) { var filterDefinition = filter.FilterDefinition; // Save the filter criteria applicators _filterCriteriaApplicatorProvider.AddCriteriaApplicator( filterDefinition.FilterName, entityType, filter.CriteriaApplicator); mapping.AddFilter( filterDefinition.FilterName, filterDefinition.DefaultFilterCondition); var metaAttribute = new MetaAttribute(filterDefinition.FilterName); metaAttribute.AddValue(filter.HqlConditionFormatString); mapping.MetaAttributes.Add( "HqlFilter_" + filterDefinition.FilterName, metaAttribute); } } configuration.AddCreateDateHooks(); return(configuration); void SetAssemblyBinding() { // NHibernate does not behave nicely with assemblies that are loaded from another folder. // By default NHibernate tries to load the assembly from the execution folder. // In our case we have pre loaded the assemblies into the domain, so we just need to tell NHibernate to pull the loaded // assembly. Setting the AssemblyResolve event fixes this. c.f. https://nhibernate.jira.com/browse/NH-2063 for further details. var assemblies = AppDomain.CurrentDomain.GetAssemblies(); AppDomain.CurrentDomain.AssemblyResolve += (s, e) => { var assemblyName = e.Name.Split(",")[0]; return(assemblies.FirstOrDefault(a => a.GetName().Name.EqualsIgnoreCase(assemblyName))); }; } }
private void InitializeFilters (Configuration cfg) { var filterDef = new FilterDefinition ( "contextFilter", null, // or your default condition new Dictionary<string, IType> { { "current", NHibernateUtil.Int32 } }, false); cfg.AddFilterDefinition (filterDef); }