Beispiel #1
0
        public static void ConfigureNHibernate(IServiceCollection services, string connectionString)
        {
            HibernatingRhinos.Profiler.Appender.NHibernate.NHibernateProfiler.Initialize();

            try
            {
                var cfg = Fluently.Configure()
                          .Database(PostgreSQLConfiguration.PostgreSQL82
                                    .ConnectionString(connectionString)
                                    .Driver <NpgsqlDriver>()
                                    .Dialect <PostGis20Dialect>()
                                    .ShowSql()
                                    .MaxFetchDepth(5)
                                    .FormatSql()
                                    .Raw("transaction.use_connection_on_system_prepare", "true")
                                    .AdoNetBatchSize(100)
                                    )
                          .Mappings(x => x.FluentMappings.AddFromAssemblyOf <AssetMap>())
                          .Cache(c => c.UseSecondLevelCache().UseQueryCache()
                                 .ProviderClass(typeof(NHibernate.Caches.RtMemoryCache.RtMemoryCacheProvider)
                                                .AssemblyQualifiedName)
                                 )
                          .CurrentSessionContext("web")
                          .BuildConfiguration();

                cfg.AddAssembly(Assembly.GetExecutingAssembly());
                cfg.AddAuxiliaryDatabaseObject(new SpatialAuxiliaryDatabaseObject(cfg));
                Metadata.AddMapping(cfg, MetadataClass.GeometryColumn);
                Metadata.AddMapping(cfg, MetadataClass.SpatialReferenceSystem);

                var sessionFactory = cfg.BuildSessionFactory();

                services.AddSingleton <ISessionFactory>(sessionFactory);

                services.AddScoped <ISession>((ctx) =>
                {
                    var sf = ctx.GetRequiredService <ISessionFactory>();

                    return(sf.OpenSession());
                });

                services.AddScoped <IUnitOfWork, NhUnitOfWork>();
            }
            catch (Exception ex)
            {
                throw new NHibernateInitializationException(ex.Message, ex.InnerException?.Message);
            }
        }
 public static Configuration ConfigureDatabase(this Configuration cfg)
 {
     cfg.DataBaseIntegration(x =>
     {
         x.ConnectionProvider <DriverConnectionProvider>();
         x.ConnectionStringName = "Default";
         x.LogSqlInConsole      = true;
         x.LogFormattedSql      = true;
         x.Dialect <PostGis20Dialect>();
         x.Driver <NpgsqlDriver>();
     });
     cfg.AddAuxiliaryDatabaseObject(new SpatialAuxiliaryDatabaseObject(cfg));
     cfg.SetProperty("current_session_context_class", "web");
     cfg.SetProperty("show_sql", "true");
     cfg.SetProperty("format_sql", "true");
     cfg.AddAssembly(Assembly.GetExecutingAssembly());
     Metadata.AddMapping(cfg, MetadataClass.GeometryColumn);
     Metadata.AddMapping(cfg, MetadataClass.SpatialReferenceSystem);
     return(cfg);
 }
Beispiel #3
0
        private void ConfigureSpatialMetadata()
        {
            bool rebuildSessionFactory = false;

            if (spatialDialect.SupportsSpatialMetadata(MetadataClass.GeometryColumn))
            {
                Metadata.AddMapping(configuration, MetadataClass.GeometryColumn);
                rebuildSessionFactory = true;
            }

            if (spatialDialect.SupportsSpatialMetadata(MetadataClass.SpatialReferenceSystem))
            {
                Metadata.AddMapping(configuration, MetadataClass.SpatialReferenceSystem);
                rebuildSessionFactory = true;
            }

            if (rebuildSessionFactory)
            {
                sessions = configuration.BuildSessionFactory();
            }
        }
        public static ISessionFactory Create(DbConfigurations dbConfigurations)
        {
            NHibernateLogger.SetLoggersFactory(new SerilogLoggerFactory());

            if (dbConfigurations.UseNodaTime)
            {
                NpgsqlConnection.GlobalTypeMapper.UseNodaTime();
            }

            var dbConfigurations1 = dbConfigurations;
            var persistenceCfg    = PostgreSQLConfiguration.Standard
                                    .Provider <global::NHibernate.Connection.DriverConnectionProvider>()
                                    .Dialect <PostgreSQL83Dialect>()
                                    .Driver <NpgsqlDriverExtended>()
                                    .ConnectionString(dbConfigurations1.ConnectionString);

            if (dbConfigurations.UseNetTopologySuite)
            {
                NpgsqlConnection.GlobalTypeMapper.UseRawPostgis();
                persistenceCfg.Dialect <global::NHibernate.Spatial.Dialect.PostGis20Dialect>();
            }

            var cfg = Fluently.Configure()
                      .Database(persistenceCfg)
                      .Mappings(x =>
            {
                dbConfigurations1.EntityTypeAssemblies.ForEach(y => x.FluentMappings.AddFromAssembly(y));
                x.FluentMappings.Conventions.Setup(y => y.Add(AutoImport.Never()));
                if (dbConfigurations.UseNodaTime)
                {
                    x.FluentMappings.Conventions.Add <NodaTimeConventions>();
                }
                if (dbConfigurations.UseNetTopologySuite)
                {
                    x.FluentMappings.Conventions.Add <PostGisConventions>();
                }
                x.FluentMappings.Conventions.Add <GeneralConventions>();
                x.FluentMappings.Conventions.Add <ListConventions>();
                x.FluentMappings.Conventions.Add <RangeConventions>();
                x.FluentMappings.Conventions.Add <JsonConventions>();
            })
                      .ExposeConfiguration(x =>
            {
                if (!string.IsNullOrWhiteSpace(dbConfigurations.SchemaExportFilename))
                {
                    new SchemaExport(x).Execute(script =>
                                                File.AppendAllText(dbConfigurations.SchemaExportFilename, script),
                                                false, false);
                }
            })
                      .BuildConfiguration();

            if (dbConfigurations.UseNetTopologySuite)
            {
                cfg.AddAuxiliaryDatabaseObject(new SpatialAuxiliaryDatabaseObject(cfg));
                Metadata.AddMapping(cfg, MetadataClass.GeometryColumn);
                Metadata.AddMapping(cfg, MetadataClass.SpatialReferenceSystem);
            }

            return(cfg.BuildSessionFactory());
        }