diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml
index 5340c7c54..58f37a11b 100644
--- a/docker/docker-compose.yml
+++ b/docker/docker-compose.yml
@@ -24,6 +24,19 @@
- "3306:3306"
volumes:
- mysql_data2:/var/lib/mysql
+
+ oracle:
+ image: container-registry.oracle.com/database/free:latest
+ container_name: oracle
+ environment:
+ ORACLE_PDB: ORCLPDB1
+ ORACLE_PWD: elsa
+ ports:
+ - "1521:1521"
+ - "5500:5500"
+ volumes:
+ - oracle-data-free:/opt/oracle/oradata
+ shm_size: '1g'
mongodb:
image: mongo:latest
@@ -84,7 +97,6 @@
- ASPNETCORE_URLS=http://+:80
- Logging__LogLevel__Default=Information
-
elsa-server:
build:
context: ../.
@@ -116,6 +128,7 @@
volumes:
postgres-data:
+ oracle-data-free:
mysql_data2:
cockroachdb-data:
mongodb_data:
diff --git a/src/apps/Elsa.Server.Web/Elsa.Server.Web.csproj b/src/apps/Elsa.Server.Web/Elsa.Server.Web.csproj
index badb50298..0c3c5f082 100644
--- a/src/apps/Elsa.Server.Web/Elsa.Server.Web.csproj
+++ b/src/apps/Elsa.Server.Web/Elsa.Server.Web.csproj
@@ -9,6 +9,7 @@
+
diff --git a/src/apps/Elsa.Server.Web/Enums/SqlDatabaseProvider.cs b/src/apps/Elsa.Server.Web/Enums/SqlDatabaseProvider.cs
index cc2988042..651163385 100644
--- a/src/apps/Elsa.Server.Web/Enums/SqlDatabaseProvider.cs
+++ b/src/apps/Elsa.Server.Web/Enums/SqlDatabaseProvider.cs
@@ -6,5 +6,6 @@ public enum SqlDatabaseProvider
Sqlite,
MySql,
PostgreSql,
+ Oracle,
CockroachDb
}
\ No newline at end of file
diff --git a/src/apps/Elsa.Server.Web/Program.cs b/src/apps/Elsa.Server.Web/Program.cs
index 199ff6cce..0e9985ad8 100644
--- a/src/apps/Elsa.Server.Web/Program.cs
+++ b/src/apps/Elsa.Server.Web/Program.cs
@@ -99,6 +99,7 @@ var identityTokenSection = identitySection.GetSection("Tokens");
var sqliteConnectionString = configuration.GetConnectionString("Sqlite")!;
var sqlServerConnectionString = configuration.GetConnectionString("SqlServer")!;
var postgresConnectionString = configuration.GetConnectionString("PostgreSql")!;
+var oracleConnectionString = configuration.GetConnectionString("Oracle")!;
var mySqlConnectionString = configuration.GetConnectionString("MySql")!;
var cockroachDbConnectionString = configuration.GetConnectionString("CockroachDb")!;
var mongoDbConnectionString = configuration.GetConnectionString("MongoDb")!;
@@ -195,6 +196,8 @@ services
#endif
else if (sqlDatabaseProvider == SqlDatabaseProvider.CockroachDb)
ef.UsePostgreSql(cockroachDbConnectionString!);
+ else if (sqlDatabaseProvider == SqlDatabaseProvider.Oracle)
+ ef.UseOracle(oracleConnectionString);
else
ef.UseSqlite(sp => sp.GetSqliteConnectionString());
@@ -231,6 +234,8 @@ services
#endif
else if (sqlDatabaseProvider == SqlDatabaseProvider.CockroachDb)
ef.UsePostgreSql(cockroachDbConnectionString!);
+ else if (sqlDatabaseProvider == SqlDatabaseProvider.Oracle)
+ ef.UseOracle(oracleConnectionString);
else
ef.UseSqlite(sp => sp.GetSqliteConnectionString());
@@ -276,7 +281,9 @@ services
ef.UseMySql(mySqlConnectionString);
#endif
else if (sqlDatabaseProvider == SqlDatabaseProvider.CockroachDb)
- ef.UsePostgreSql(cockroachDbConnectionString!);
+ ef.UsePostgreSql(cockroachDbConnectionString);
+ else if (sqlDatabaseProvider == SqlDatabaseProvider.Oracle)
+ ef.UseOracle(oracleConnectionString);
else
ef.UseSqlite(sp => sp.GetSqliteConnectionString());
@@ -411,7 +418,9 @@ services
ef.UseMySql(mySqlConnectionString);
#endif
else if (sqlDatabaseProvider == SqlDatabaseProvider.CockroachDb)
- ef.UsePostgreSql(cockroachDbConnectionString!);
+ ef.UsePostgreSql(cockroachDbConnectionString);
+ else if (sqlDatabaseProvider == SqlDatabaseProvider.Oracle)
+ ef.UseOracle(oracleConnectionString);
else
ef.UseSqlite(sp => sp.GetSqliteConnectionString());
@@ -614,6 +623,7 @@ services
if (sqlDatabaseProvider == SqlDatabaseProvider.Sqlite) ef.UseSqlite(sqliteConnectionString);
if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer) ef.UseSqlServer(sqlServerConnectionString);
if (sqlDatabaseProvider == SqlDatabaseProvider.PostgreSql) ef.UsePostgreSql(postgresConnectionString);
+ if (sqlDatabaseProvider == SqlDatabaseProvider.Oracle) ef.UseOracle(oracleConnectionString);
#if !NET9_0
if (sqlDatabaseProvider == SqlDatabaseProvider.MySql)
ef.UseMySql(mySqlConnectionString);
diff --git a/src/apps/Elsa.Server.Web/appsettings.json b/src/apps/Elsa.Server.Web/appsettings.json
index 221cdcf22..ae6820a3f 100644
--- a/src/apps/Elsa.Server.Web/appsettings.json
+++ b/src/apps/Elsa.Server.Web/appsettings.json
@@ -13,6 +13,7 @@
"Sqlite": "Data Source=App_Data/elsa.sqlite.db;Cache=Shared;",
"MySql": "Server=localhost;Database=elsa;Uid=admin;Pwd=password;",
"PostgreSql": "Server=localhost;Username=elsa;Database=elsa;Port=5432;Password=elsa;SSLMode=Prefer;MaxPoolSize=2000;Timeout=60",
+ "Oracle": "User Id=SYSTEM;Password=elsa;Data Source=oracle:1521/ORCLPDB1",
"CockroachDb": "Host=localhost;Port=26257;Database=elsa;SslMode=Disable;Username=root;IncludeErrorDetail=true",
"MongoDb": "mongodb://localhost:27017/elsa-workflows",
"AzureServiceBus": "",
diff --git a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore/SetupForOracle.cs b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore/SetupForOracle.cs
index 2f5444792..1dec01e7d 100644
--- a/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore/SetupForOracle.cs
+++ b/src/modules/Elsa.Agents.Persistence.EntityFrameworkCore/SetupForOracle.cs
@@ -19,7 +19,7 @@ public class SetupForOracle : IEntityModelCreatingHandler
// In order to use data more than 2000 char we have to use NCLOB.
// In Oracle, we have to explicitly say the column is NCLOB otherwise it would be considered nvarchar(2000).
- modelBuilder.Entity().Property("SerializedSettings").HasColumnType("NCLOB");
- modelBuilder.Entity().Property("SerializedAgentConfig").HasColumnType("NCLOB");
+ modelBuilder.Entity().Property("SerializedSettings").HasColumnType("NCLOB");
+ modelBuilder.Entity().Property("SerializedAgentConfig").HasColumnType("NCLOB");
}
}
\ No newline at end of file
diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/ElsaDbContextBase.cs b/src/modules/Elsa.EntityFrameworkCore.Common/ElsaDbContextBase.cs
index eef02af6e..2a677bb6f 100644
--- a/src/modules/Elsa.EntityFrameworkCore.Common/ElsaDbContextBase.cs
+++ b/src/modules/Elsa.EntityFrameworkCore.Common/ElsaDbContextBase.cs
@@ -69,7 +69,7 @@ public abstract class ElsaDbContextBase : DbContext, IElsaDbContextSchema
var entityTypeHandlers = ServiceProvider.GetServices().ToList();
- foreach (var entityType in modelBuilder.Model.GetEntityTypes())
+ foreach (var entityType in modelBuilder.Model.GetEntityTypes().ToList())
{
foreach (var handler in entityTypeHandlers)
{
diff --git a/src/modules/Elsa.EntityFrameworkCore/Modules/Alterations/SetupForOracle.cs b/src/modules/Elsa.EntityFrameworkCore/Modules/Alterations/SetupForOracle.cs
index a9b7703bc..8c3b5b2a3 100644
--- a/src/modules/Elsa.EntityFrameworkCore/Modules/Alterations/SetupForOracle.cs
+++ b/src/modules/Elsa.EntityFrameworkCore/Modules/Alterations/SetupForOracle.cs
@@ -18,8 +18,11 @@ public class SetupForOracle : IEntityModelCreatingHandler
// In order to use data more than 2000 char we have to use NCLOB.
// In Oracle, we have to explicitly say the column is NCLOB otherwise it would be considered nvarchar(2000).
- modelBuilder.Entity().Property("SerializedAlterations").HasColumnType("NCLOB");
- modelBuilder.Entity().Property("SerializedWorkflowInstanceIds").HasColumnType("NCLOB");
- modelBuilder.Entity().Property("SerializedLog").HasColumnType("NCLOB");
+ modelBuilder.Entity().Ignore(x => x.Alterations);
+ modelBuilder.Entity().Ignore(x => x.WorkflowInstanceFilter);
+ modelBuilder.Entity().Property("SerializedAlterations").HasColumnType("NCLOB");
+ modelBuilder.Entity().Property("SerializedWorkflowInstanceFilter").HasColumnType("NCLOB");
+ modelBuilder.Entity().Ignore(x => x.Log);
+ modelBuilder.Entity().Property("SerializedLog").HasColumnType("NCLOB");
}
}
\ No newline at end of file
diff --git a/src/modules/Elsa.EntityFrameworkCore/Modules/Management/SetupForOracle.cs b/src/modules/Elsa.EntityFrameworkCore/Modules/Management/SetupForOracle.cs
index c14e6f4e1..da338d428 100644
--- a/src/modules/Elsa.EntityFrameworkCore/Modules/Management/SetupForOracle.cs
+++ b/src/modules/Elsa.EntityFrameworkCore/Modules/Management/SetupForOracle.cs
@@ -18,8 +18,8 @@ public class SetupForOracle : IEntityModelCreatingHandler
// In order to use data more than 2000 char we have to use NCLOB.
// In Oracle, we have to explicitly say the column is NCLOB otherwise it would be considered nvarchar(2000).
- modelBuilder.Entity().Property("Data").HasColumnType("NCLOB");
- modelBuilder.Entity().Property("StringData").HasColumnType("NCLOB");
- modelBuilder.Entity().Property("Data").HasColumnType("NCLOB");
+ modelBuilder.Entity().Property("Data").HasColumnType("NCLOB");
+ modelBuilder.Entity().Property("StringData").HasColumnType("NCLOB");
+ modelBuilder.Entity().Property("Data").HasColumnType("NCLOB");
}
}
\ No newline at end of file
diff --git a/src/modules/Elsa.EntityFrameworkCore/Modules/Runtime/SetupForOracle.cs b/src/modules/Elsa.EntityFrameworkCore/Modules/Runtime/SetupForOracle.cs
index 2a4351a38..9820dfbab 100644
--- a/src/modules/Elsa.EntityFrameworkCore/Modules/Runtime/SetupForOracle.cs
+++ b/src/modules/Elsa.EntityFrameworkCore/Modules/Runtime/SetupForOracle.cs
@@ -19,22 +19,37 @@ public class SetupForOracle : IEntityModelCreatingHandler
// To use data more than 2000 char we have to use NCLOB.
// In Oracle, we have to explicitly say the column is NCLOB otherwise it would be considered nvarchar(2000).
- modelBuilder.Entity().Property("SerializedPayload").HasColumnType("NCLOB");
+ modelBuilder.Entity().Property("SerializedPayload").HasColumnType("NCLOB");
- modelBuilder.Entity().Property("SerializedActivityState").HasColumnType("NCLOB");
- modelBuilder.Entity().Property("SerializedPayload").HasColumnType("NCLOB");
+ modelBuilder.Entity().Ignore(x => x.ActivityState);
+ modelBuilder.Entity().Ignore(x => x.Payload);
+ modelBuilder.Entity().Property("SerializedActivityState").HasColumnType("NCLOB");
+ modelBuilder.Entity().Property("SerializedPayload").HasColumnType("NCLOB");
- modelBuilder.Entity().Property("SerializedActivityState").HasColumnType("NCLOB");
- modelBuilder.Entity().Property("SerializedException").HasColumnType("NCLOB");
- modelBuilder.Entity().Property("SerializedPayload").HasColumnType("NCLOB");
- modelBuilder.Entity().Property("SerializedOutputs").HasColumnType("NCLOB");
+ modelBuilder.Entity().Ignore(x => x.ActivityState);
+ modelBuilder.Entity().Ignore(x => x.Exception);
+ modelBuilder.Entity().Ignore(x => x.Payload);
+ modelBuilder.Entity().Ignore(x => x.Outputs);
+ modelBuilder.Entity().Ignore(x => x.Properties);
+ modelBuilder.Entity().Property("SerializedActivityState").HasColumnType("NCLOB");
+ modelBuilder.Entity().Property("SerializedException").HasColumnType("NCLOB");
+ modelBuilder.Entity().Property("SerializedPayload").HasColumnType("NCLOB");
+ modelBuilder.Entity().Property("SerializedOutputs").HasColumnType("NCLOB");
+ modelBuilder.Entity().Property("SerializedProperties").HasColumnType("NCLOB");
- modelBuilder.Entity().Property("SerializedPayload").HasColumnType("NCLOB");
- modelBuilder.Entity().Property("SerializedMetadata").HasColumnType("NCLOB");
+ modelBuilder.Entity().Ignore(x => x.Payload);
+ modelBuilder.Entity().Ignore(x => x.Metadata);
+ modelBuilder.Entity().Property("SerializedPayload").HasColumnType("NCLOB");
+ modelBuilder.Entity().Property("SerializedMetadata").HasColumnType("NCLOB");
+
+ modelBuilder.Entity().Ignore(x => x.Payload);
+ modelBuilder.Entity().Property("SerializedPayload").HasColumnType("NCLOB");
- modelBuilder.Entity().Property("SerializedInput").HasColumnType("NCLOB");
- modelBuilder.Entity().Property("SerializedBookmarkPayload").HasColumnType("NCLOB");
-
- modelBuilder.Entity().Property("SerializedValue").HasColumnType("NCLOB");
+ modelBuilder.Entity().Ignore(x => x.Input);
+ modelBuilder.Entity().Ignore(x => x.BookmarkPayload);
+ modelBuilder.Entity().Property("SerializedInput").HasColumnType("NCLOB");
+ modelBuilder.Entity().Property("SerializedBookmarkPayload").HasColumnType("NCLOB");
+
+ modelBuilder.Entity().Property("SerializedValue").HasColumnType("NCLOB");
}
}
\ No newline at end of file