diff --git a/src/apps/Elsa.ServerAndStudio.Web/Elsa.ServerAndStudio.Web.csproj b/src/apps/Elsa.ServerAndStudio.Web/Elsa.ServerAndStudio.Web.csproj index 7a9f688cd..1c73d2f23 100644 --- a/src/apps/Elsa.ServerAndStudio.Web/Elsa.ServerAndStudio.Web.csproj +++ b/src/apps/Elsa.ServerAndStudio.Web/Elsa.ServerAndStudio.Web.csproj @@ -10,11 +10,15 @@ + + + + diff --git a/src/apps/Elsa.ServerAndStudio.Web/Enums/SqlDatabaseProvider.cs b/src/apps/Elsa.ServerAndStudio.Web/Enums/SqlDatabaseProvider.cs new file mode 100644 index 000000000..ee524806a --- /dev/null +++ b/src/apps/Elsa.ServerAndStudio.Web/Enums/SqlDatabaseProvider.cs @@ -0,0 +1,10 @@ +namespace Elsa.ServerAndStudio.Web.Enums; + +public enum SqlDatabaseProvider +{ + SqlServer, + Sqlite, + MySql, + PostgreSql, + CockroachDb +} \ No newline at end of file diff --git a/src/apps/Elsa.ServerAndStudio.Web/Program.cs b/src/apps/Elsa.ServerAndStudio.Web/Program.cs index 59db60e34..f807851c7 100644 --- a/src/apps/Elsa.ServerAndStudio.Web/Program.cs +++ b/src/apps/Elsa.ServerAndStudio.Web/Program.cs @@ -24,11 +24,10 @@ var builder = WebApplication.CreateBuilder(args); builder.WebHost.UseStaticWebAssets(); var services = builder.Services; var configuration = builder.Configuration; -var featuresSection = configuration.GetSection("Features"); -var databaseProvider = featuresSection.GetValue("DatabaseProvider"); var sqliteConnectionString = configuration.GetConnectionString("Sqlite")!; var mySqlConnectionString = configuration.GetConnectionString("MySql")!; var sqlServerConnectionString = configuration.GetConnectionString("SqlServer")!; +var postgreSqlConnectionString = configuration.GetConnectionString("PostgreSql")!; var rabbitMqConnectionString = configuration.GetConnectionString("RabbitMq")!; var azureServiceBusConnectionString = configuration.GetConnectionString("AzureServiceBus")!; var identitySection = configuration.GetSection("Identity"); @@ -36,6 +35,7 @@ var identityTokenSection = identitySection.GetSection("Tokens"); var massTransitSection = configuration.GetSection("MassTransit"); var massTransitDispatcherSection = configuration.GetSection("MassTransit.Dispatcher"); var heartbeatSection = configuration.GetSection("Heartbeat"); +var sqlDatabaseProvider = Enum.Parse(configuration["DatabaseProvider"] ?? "Sqlite"); services.Configure(massTransitSection); services.Configure(massTransitDispatcherSection); @@ -65,20 +65,22 @@ services if (useCaching) management.UseCache(); - if (databaseProvider == "MySql") + if (sqlDatabaseProvider == SqlDatabaseProvider.MySql) management.UseEntityFrameworkCore(ef => ef.UseMySql(mySqlConnectionString)); - else if (databaseProvider == "SqlServer") + else if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer) management.UseEntityFrameworkCore(ef => ef.UseSqlServer(sqlServerConnectionString)); - else if (databaseProvider == "Sqlite") + else if (sqlDatabaseProvider == SqlDatabaseProvider.Sqlite) management.UseEntityFrameworkCore(ef => ef.UseSqlite(sqliteConnectionString)); }) .UseWorkflowRuntime(runtime => { - if (databaseProvider == "MySql") + if (sqlDatabaseProvider == SqlDatabaseProvider.MySql) runtime.UseEntityFrameworkCore(ef => ef.UseMySql(mySqlConnectionString)); - else if (databaseProvider == "SqlServer") + else if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer) runtime.UseEntityFrameworkCore(ef => ef.UseSqlServer(sqlServerConnectionString)); - else if (databaseProvider == "Sqlite") + else if(sqlDatabaseProvider == SqlDatabaseProvider.PostgreSql) + runtime.UseEntityFrameworkCore(ef => ef.UsePostgreSql(postgreSqlConnectionString)); + else if (sqlDatabaseProvider == SqlDatabaseProvider.Sqlite) runtime.UseEntityFrameworkCore(ef => ef.UseSqlite(sqliteConnectionString)); if (useMassTransit) @@ -122,11 +124,13 @@ services .UseAgentsApi() .UseAgentPersistence(persistence => persistence.UseEntityFrameworkCore(ef => { - if (databaseProvider == "MySql") + if (sqlDatabaseProvider == SqlDatabaseProvider.MySql) ef.UseMySql(mySqlConnectionString); - else if (databaseProvider == "SqlServer") + else if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer) ef.UseSqlServer(sqlServerConnectionString); - else if (databaseProvider == "Sqlite") + else if(sqlDatabaseProvider == SqlDatabaseProvider.PostgreSql) + ef.UsePostgreSql(postgreSqlConnectionString); + else if (sqlDatabaseProvider == SqlDatabaseProvider.Sqlite) ef.UseSqlite(sqliteConnectionString); })) .UseAgentActivities() diff --git a/src/apps/Elsa.ServerAndStudio.Web/appsettings.json b/src/apps/Elsa.ServerAndStudio.Web/appsettings.json index 843df197e..0e85580b3 100644 --- a/src/apps/Elsa.ServerAndStudio.Web/appsettings.json +++ b/src/apps/Elsa.ServerAndStudio.Web/appsettings.json @@ -12,11 +12,10 @@ "Sqlite": "Data Source=elsa.sqlite.db;Cache=Shared;", "RabbitMq": "rabbitmq://guest:guest@localhost:5672", "MySql": "Server=localhost;Database=elsa;Uid=user;Pwd=password;", - "SqlServer": "Server=localhost;Database=elsa;User Id=sa;Password=Password12!" - }, - "Features": { - "DatabaseProvider": "Sqlite" + "SqlServer": "Server=localhost;Database=elsa;User Id=sa;Password=Password12!", + "PostgreSql": "Server=localhost;Username=elsa;Database=elsa;Port=5432;Password=elsa;SSLMode=Prefer;MaxPoolSize=2000;Timeout=60" }, + "DatabaseProvider": "Sqlite", "Hosting": { "BaseUrl": "https://localhost:8080", "BasePath": "" diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql/PostgreSqlProvidersExtensions.cs b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql/PostgreSqlProvidersExtensions.cs index 103b6bb0b..b8cccd4b0 100644 --- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql/PostgreSqlProvidersExtensions.cs +++ b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql/PostgreSqlProvidersExtensions.cs @@ -14,7 +14,7 @@ public static class AgentsPostgreSqlProvidersExtensions /// /// Configures the feature to use SQL Server. /// - public static EFCoreAgentPersistenceFeature UseSqlServer(this EFCoreAgentPersistenceFeature feature, string connectionString, ElsaDbContextOptions? options = null) + public static EFCoreAgentPersistenceFeature UsePostgreSql(this EFCoreAgentPersistenceFeature feature, string connectionString, ElsaDbContextOptions? options = null) { feature.UsePostgreSql(Assembly, connectionString, options); return feature;