Add PostgreSQL support for database providers
Introduced PostgreSQL as a new database provider option in the application. Created an enumeration for SQL database providers and updated configurations and project references to support PostgreSQL. Adjusted logic to accommodate the new provider, ensuring integration across components.
This commit is contained in:
parent
844af43f39
commit
9f65310353
|
|
@ -10,11 +10,15 @@
|
|||
<ProjectReference Include="..\..\modules\Elsa.Agents.Activities\Elsa.Agents.Activities.csproj" />
|
||||
<ProjectReference Include="..\..\modules\Elsa.Agents.Api\Elsa.Agents.Api.csproj" />
|
||||
<ProjectReference Include="..\..\modules\Elsa.Agents.Persistence.EntityFrameworkCore.MySql\Elsa.Agents.Persistence.EntityFrameworkCore.MySql.csproj" />
|
||||
<ProjectReference Include="..\..\modules\Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql\Elsa.Agents.Persistence.EntityFrameworkCore.PostgreSql.csproj" />
|
||||
<ProjectReference Include="..\..\modules\Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite\Elsa.Agents.Persistence.EntityFrameworkCore.Sqlite.csproj" />
|
||||
<ProjectReference Include="..\..\modules\Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer\Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer.csproj" />
|
||||
<ProjectReference Include="..\..\modules\Elsa.EntityFrameworkCore.PostgreSql\Elsa.EntityFrameworkCore.PostgreSql.csproj" />
|
||||
<ProjectReference Include="..\..\modules\Elsa.EntityFrameworkCore.SqlServer\Elsa.EntityFrameworkCore.SqlServer.csproj" />
|
||||
<ProjectReference Include="..\..\modules\Elsa.JavaScript.Libraries\Elsa.JavaScript.Libraries.csproj" />
|
||||
<ProjectReference Include="..\..\modules\Elsa.Quartz.EntityFrameworkCore.PostgreSql\Elsa.Quartz.EntityFrameworkCore.PostgreSql.csproj" />
|
||||
<ProjectReference Include="..\..\modules\Elsa.Quartz.EntityFrameworkCore.SqlServer\Elsa.Quartz.EntityFrameworkCore.SqlServer.csproj" />
|
||||
<ProjectReference Include="..\..\modules\Elsa.Secrets.Persistence.EntityFrameworkCore.PostgreSql\Elsa.Secrets.Persistence.EntityFrameworkCore.PostgreSql.csproj" />
|
||||
<ProjectReference Include="..\..\modules\Elsa\Elsa.csproj"/>
|
||||
<ProjectReference Include="..\..\modules\Elsa.Caching.Distributed.MassTransit\Elsa.Caching.Distributed.MassTransit.csproj" />
|
||||
<ProjectReference Include="..\..\modules\Elsa.Caching.Distributed\Elsa.Caching.Distributed.csproj" />
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
namespace Elsa.ServerAndStudio.Web.Enums;
|
||||
|
||||
public enum SqlDatabaseProvider
|
||||
{
|
||||
SqlServer,
|
||||
Sqlite,
|
||||
MySql,
|
||||
PostgreSql,
|
||||
CockroachDb
|
||||
}
|
||||
|
|
@ -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<string>("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<SqlDatabaseProvider>(configuration["DatabaseProvider"] ?? "Sqlite");
|
||||
|
||||
services.Configure<MassTransitOptions>(massTransitSection);
|
||||
services.Configure<MassTransitWorkflowDispatcherOptions>(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()
|
||||
|
|
|
|||
|
|
@ -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": ""
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ public static class AgentsPostgreSqlProvidersExtensions
|
|||
/// <summary>
|
||||
/// Configures the feature to use SQL Server.
|
||||
/// </summary>
|
||||
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;
|
||||
|
|
|
|||
Loading…
Reference in a new issue