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;