public SessionFactoryBuilder(IDatabasePlatform platform, string connStr, IList<Assembly> assemblies, bool updateSchema, string defaultSchema, ILinqToHqlGeneratorsRegistry linqRegistry, bool showSql, Action<global::NHibernate.Cfg.Configuration> exposedConfig)
{
var configurer = platform.AsNHibernateConfiguration(connStr) as IPersistenceConfigurer;
global::NHibernate.Cfg.Configuration configuration = null;
_sessionFactory = Fluently.Configure()
.Database(configurer)
.Mappings(m => assemblies.ToList().ForEach(asm=> m.FluentMappings.AddFromAssembly(asm)))
.ExposeConfiguration(cfg =>
{
configuration = cfg;
cfg.SetProperty(global::NHibernate.Cfg.Environment.CollectionTypeFactoryClass, typeof(List<>).AssemblyQualifiedName);
cfg.SetProperty(global::NHibernate.Cfg.Environment.PrepareSql, false.ToString());
cfg.SetProperty(global::NHibernate.Cfg.Environment.ShowSql, showSql.ToString());
cfg.SetProperty(global::NHibernate.Cfg.Environment.TransactionStrategy, "NHibernate.Transaction.AdoNetTransactionFactory");
if(!String.IsNullOrEmpty(defaultSchema))
cfg.SetProperty(global::NHibernate.Cfg.Environment.DefaultSchema, defaultSchema);
if (null != linqRegistry)
cfg.SetProperty(global::NHibernate.Cfg.Environment.LinqToHqlGeneratorsRegistry, linqRegistry.GetType().AssemblyQualifiedName);
if(exposedConfig != null)
exposedConfig(cfg);
})
.BuildSessionFactory();
if (updateSchema)
UpdateSchema(configuration);
}