private Configuration BuildConfiguration()
        {
            Logger.Debug("Building configuration");
            var parameters = GetSessionFactoryParameters();

            var config = _sessionConfigurationCache.GetConfiguration(() =>
                                                                     _dataServicesProviderFactory
                                                                     .CreateProvider(parameters)
                                                                     .BuildConfiguration(parameters)
                                                                     .Cache(c => _cacheConfiguration.Configure(c))
                                                                     );

            #region NH specific optimization

            // cannot be done in fluent config
            // the IsSelectable = false prevents unused ContentPartRecord proxies from being created
            // for each ContentItemRecord or ContentItemVersionRecord.
            // done for perf reasons - has no other side-effect

            foreach (var persistentClass in config.ClassMappings)
            {
                if (persistentClass.EntityName.StartsWith("Boying.ContentManagement.Records."))
                {
                    foreach (var property in persistentClass.PropertyIterator)
                    {
                        if (property.Name.EndsWith("Record") && !property.IsBasicPropertyAccessor)
                        {
                            property.IsSelectable = false;
                        }
                    }
                }
            }

            #endregion

            parameters.Configurers.Invoke(c => c.Finished(config), Logger);

            Logger.Debug("Done Building configuration");
            return(config);
        }