diff --git a/Directory.Packages.props b/Directory.Packages.props
index 4ed98d627a..e87bdeee62 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -133,6 +133,7 @@
+
@@ -164,6 +165,7 @@
+
diff --git a/Elsa.sln b/Elsa.sln
index 0cccd0d7a6..0802dfe5d5 100644
--- a/Elsa.sln
+++ b/Elsa.sln
@@ -272,6 +272,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Quartz.EntityFramework
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Quartz.EntityFrameworkCore.PostgreSql", "src\modules\Elsa.Quartz.EntityFrameworkCore.PostgreSql\Elsa.Quartz.EntityFrameworkCore.PostgreSql.csproj", "{CCCCEF8C-7D96-4BEA-B9D0-E91EDF08E65D}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.EntityFrameworkCore.Oracle", "src\modules\Elsa.EntityFrameworkCore.Oracle\Elsa.EntityFrameworkCore.Oracle.csproj", "{49D8D2CF-AF68-40FA-951F-018247C97443}"
+EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.FileStorage", "src\modules\Elsa.FileStorage\Elsa.FileStorage.csproj", "{732BF088-6AD7-4C4D-9A48-8074253596D4}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "storage", "storage", "{B818988E-639C-4E6E-85C1-B231BCAD9DAB}"
@@ -746,6 +748,10 @@ Global
{CCCCEF8C-7D96-4BEA-B9D0-E91EDF08E65D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CCCCEF8C-7D96-4BEA-B9D0-E91EDF08E65D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CCCCEF8C-7D96-4BEA-B9D0-E91EDF08E65D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {49D8D2CF-AF68-40FA-951F-018247C97443}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {49D8D2CF-AF68-40FA-951F-018247C97443}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {49D8D2CF-AF68-40FA-951F-018247C97443}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {49D8D2CF-AF68-40FA-951F-018247C97443}.Release|Any CPU.Build.0 = Release|Any CPU
{732BF088-6AD7-4C4D-9A48-8074253596D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{732BF088-6AD7-4C4D-9A48-8074253596D4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{732BF088-6AD7-4C4D-9A48-8074253596D4}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -989,6 +995,7 @@ Global
{05F3B23E-CF28-467B-AD3C-595EA4ED6B96} = {AB797AF0-C12C-46DE-A157-7E25625C6200}
{74ACD9D0-8B4C-42FA-A582-E93BF0075023} = {AB797AF0-C12C-46DE-A157-7E25625C6200}
{CCCCEF8C-7D96-4BEA-B9D0-E91EDF08E65D} = {AB797AF0-C12C-46DE-A157-7E25625C6200}
+ {49D8D2CF-AF68-40FA-951F-018247C97443} = {9B4F139F-7D26-435C-A561-89E65A67A8E5}
{732BF088-6AD7-4C4D-9A48-8074253596D4} = {B818988E-639C-4E6E-85C1-B231BCAD9DAB}
{B818988E-639C-4E6E-85C1-B231BCAD9DAB} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
{29638A67-E79F-44FE-AC05-DA499EBA929E} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
diff --git a/migrations/efcore-3.0.sh b/migrations/efcore-3.0.sh
index b2f25f01e6..e66bcb3558 100644
--- a/migrations/efcore-3.0.sh
+++ b/migrations/efcore-3.0.sh
@@ -4,7 +4,7 @@
mods=("Alterations" "Runtime" "Management" "Identity" "Labels")
# Define the list of providers
-providers=("MySql" "SqlServer" "Sqlite" "PostgreSql")
+providers=("MySql" "SqlServer" "Sqlite" "PostgreSql" "Oracle")
# Connection strings for each provider
typeset -A connStrings
diff --git a/migrations/efcore-3.1-sql.sh b/migrations/efcore-3.1-sql.sh
index f3414ad7f5..6fffe06396 100755
--- a/migrations/efcore-3.1-sql.sh
+++ b/migrations/efcore-3.1-sql.sh
@@ -4,7 +4,7 @@
mods=("Alterations" "Runtime" "Management" "Identity")
# Define the list of providers
-providers=("MySql" "SqlServer" "Sqlite" "PostgreSql")
+providers=("MySql" "SqlServer" "Sqlite" "PostgreSql" "Oracle")
# Loop through each module
for module in "${mods[@]}"; do
diff --git a/migrations/efcore-3.1.sh b/migrations/efcore-3.1.sh
index 236951e6a8..158880741c 100755
--- a/migrations/efcore-3.1.sh
+++ b/migrations/efcore-3.1.sh
@@ -4,7 +4,7 @@
mods=("Alterations" "Runtime" "Management" "Identity" "Labels")
# Define the list of providers
-providers=("MySql" "SqlServer" "Sqlite" "PostgreSql")
+providers=("MySql" "SqlServer" "Sqlite" "PostgreSql" "Oracle")
# Loop through each module
for module in "${mods[@]}"; do
diff --git a/migrations/efcore-3.2.sh b/migrations/efcore-3.2.sh
index 16cd1a66ea..0a2edd654e 100755
--- a/migrations/efcore-3.2.sh
+++ b/migrations/efcore-3.2.sh
@@ -4,7 +4,7 @@
mods=("Alterations" "Runtime" "Management" "Identity" "Labels")
# Define the list of providers
-providers=("MySql" "SqlServer" "Sqlite" "PostgreSql")
+providers=("MySql" "SqlServer" "Sqlite" "PostgreSql" "Oracle")
# Loop through each module
for module in "${mods[@]}"; do
diff --git a/migrations/efcore-3.3.sh b/migrations/efcore-3.3.sh
index 4f43b0cd88..fd265176cb 100755
--- a/migrations/efcore-3.3.sh
+++ b/migrations/efcore-3.3.sh
@@ -4,7 +4,7 @@
mods=("Alterations" "Runtime" "Management" "Identity" "Labels")
# Define the list of providers
-providers=("MySql" "SqlServer" "Sqlite" "PostgreSql")
+providers=("MySql" "SqlServer" "Sqlite" "PostgreSql" "Oracle")
# Loop through each module
for module in "${mods[@]}"; do
diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/DbContextFactories.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/DbContextFactories.cs
new file mode 100644
index 0000000000..bc7fcd943e
--- /dev/null
+++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/DbContextFactories.cs
@@ -0,0 +1,46 @@
+using Elsa.EntityFrameworkCore.Common.Abstractions;
+using Elsa.EntityFrameworkCore.Extensions;
+using Elsa.EntityFrameworkCore.Modules.Alterations;
+using Elsa.EntityFrameworkCore.Modules.Identity;
+using Elsa.EntityFrameworkCore.Modules.Labels;
+using Elsa.EntityFrameworkCore.Modules.Management;
+using Elsa.EntityFrameworkCore.Modules.Runtime;
+using JetBrains.Annotations;
+using Microsoft.EntityFrameworkCore;
+
+#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
+
+namespace Elsa.EntityFrameworkCore.Oracle;
+
+[UsedImplicitly]
+public class IdentityDbContextFactory : OracleDesignTimeDbContextFactory
+{
+}
+
+[UsedImplicitly]
+public class ManagementDbContextFactory : OracleDesignTimeDbContextFactory
+{
+}
+
+[UsedImplicitly]
+public class RuntimeDbContextFactory : OracleDesignTimeDbContextFactory
+{
+}
+
+[UsedImplicitly]
+public class LabelsDbContextFactory : OracleDesignTimeDbContextFactory
+{
+}
+
+[UsedImplicitly]
+public class AlterationsDbContextFactories : OracleDesignTimeDbContextFactory
+{
+}
+
+public class OracleDesignTimeDbContextFactory : DesignTimeDbContextFactoryBase where TDbContext : DbContext
+{
+ protected override void ConfigureBuilder(DbContextOptionsBuilder builder, string connectionString)
+ {
+ builder.UseElsaOracle(GetType().Assembly, connectionString);
+ }
+}
\ No newline at end of file
diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/DbContextOptionsBuilder.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/DbContextOptionsBuilder.cs
new file mode 100644
index 0000000000..efd9b9d5ba
--- /dev/null
+++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/DbContextOptionsBuilder.cs
@@ -0,0 +1,28 @@
+using System.Reflection;
+using Elsa.EntityFrameworkCore.Common;
+using Microsoft.EntityFrameworkCore;
+using Oracle.EntityFrameworkCore.Infrastructure;
+
+// ReSharper disable once CheckNamespace
+namespace Elsa.EntityFrameworkCore.Extensions;
+
+///
+/// Contains extension methods for .
+///
+public static class DbContextOptionsBuilderExtensions
+{
+ ///
+ /// Configures Entity Framework Core with Oracle.
+ ///
+ public static DbContextOptionsBuilder UseElsaOracle(this DbContextOptionsBuilder builder, Assembly migrationsAssembly, string connectionString, ElsaDbContextOptions? options = default, Action? configure = default) =>
+ builder
+ .UseElsaDbContextOptions(options)
+ .UseOracle(connectionString, db =>
+ {
+ db
+ .MigrationsAssembly(options.GetMigrationsAssemblyName(migrationsAssembly))
+ .MigrationsHistoryTable(options.GetMigrationsHistoryTableName(), options.GetSchemaName());
+
+ configure?.Invoke(db);
+ });
+}
\ No newline at end of file
diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Elsa.EntityFrameworkCore.Oracle.csproj b/src/modules/Elsa.EntityFrameworkCore.Oracle/Elsa.EntityFrameworkCore.Oracle.csproj
new file mode 100644
index 0000000000..1157e64ec5
--- /dev/null
+++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Elsa.EntityFrameworkCore.Oracle.csproj
@@ -0,0 +1,19 @@
+
+
+
+
+ Provides Oracle EF Core migrations for various modules.
+
+ elsa module persistence efcore oracle
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Features.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Features.cs
new file mode 100644
index 0000000000..c026605aff
--- /dev/null
+++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Features.cs
@@ -0,0 +1,81 @@
+using System.Reflection;
+using Elsa.EntityFrameworkCore.Common;
+using Elsa.EntityFrameworkCore.Modules.Alterations;
+using Elsa.EntityFrameworkCore.Modules.Identity;
+using Elsa.EntityFrameworkCore.Modules.Labels;
+using Elsa.EntityFrameworkCore.Modules.Management;
+using Elsa.EntityFrameworkCore.Modules.Runtime;
+
+// ReSharper disable once CheckNamespace
+namespace Elsa.EntityFrameworkCore.Extensions;
+
+///
+/// Provides extensions to configure EF Core to use Oracle.
+///
+public static class OracleProvidersExtensions
+{
+ private static Assembly Assembly => typeof(OracleProvidersExtensions).Assembly;
+
+ ///
+ /// Configures the to use Oracle.
+ ///
+ public static EFCoreIdentityPersistenceFeature UseOracle(this EFCoreIdentityPersistenceFeature feature, string connectionString, ElsaDbContextOptions? options = default)
+ {
+ feature.DbContextOptionsBuilder = (_, db) => db.UseElsaOracle(Assembly, connectionString, options);
+ return feature;
+ }
+
+ ///
+ /// Configures the to use Oracle.
+ ///
+ public static EFCoreAlterationsPersistenceFeature UseOracle(this EFCoreAlterationsPersistenceFeature feature, string connectionString, ElsaDbContextOptions? options = default)
+ {
+ feature.DbContextOptionsBuilder = (_, db) => db.UseElsaOracle(Assembly, connectionString, options);
+ return feature;
+ }
+
+ ///
+ /// Configures the to use Oracle.
+ ///
+ public static EFCoreLabelPersistenceFeature UseOracle(this EFCoreLabelPersistenceFeature feature, string connectionString, ElsaDbContextOptions? options = default)
+ {
+ feature.DbContextOptionsBuilder = (_, db) => db.UseElsaOracle(Assembly, connectionString, options);
+ return feature;
+ }
+
+ ///
+ /// Configures the to use Oracle.
+ ///
+ public static EFCoreWorkflowDefinitionPersistenceFeature UseOracle(this EFCoreWorkflowDefinitionPersistenceFeature feature, string connectionString, ElsaDbContextOptions? options = default)
+ {
+ feature.DbContextOptionsBuilder = (_, db) => db.UseElsaOracle(Assembly, connectionString, options);
+ return feature;
+ }
+
+ ///
+ /// Configures the to use Oracle.
+ ///
+ public static EFCoreWorkflowInstancePersistenceFeature UseOracle(this EFCoreWorkflowInstancePersistenceFeature feature, string connectionString, ElsaDbContextOptions? options = default)
+ {
+ feature.DbContextOptionsBuilder = (_, db) => db.UseElsaOracle(Assembly, connectionString, options);
+ return feature;
+ }
+
+ ///
+ /// Configures the to use Oracle.
+ ///
+ public static WorkflowManagementPersistenceFeature UseOracle(this WorkflowManagementPersistenceFeature feature, string connectionString, ElsaDbContextOptions? options = default)
+ {
+ feature.DbContextOptionsBuilder = (_, db) => db.UseElsaOracle(Assembly, connectionString, options);
+ return feature;
+ }
+
+ ///
+ /// Configures the to use Oracle.
+ ///
+ public static EFCoreWorkflowRuntimePersistenceFeature UseOracle(this EFCoreWorkflowRuntimePersistenceFeature feature, string connectionString, ElsaDbContextOptions? options = default)
+ {
+ feature.DbContextOptionsBuilder = (_, db) => db.UseElsaOracle(Assembly, connectionString, options);
+ return feature;
+ }
+}
\ No newline at end of file
diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/FodyWeavers.xml b/src/modules/Elsa.EntityFrameworkCore.Oracle/FodyWeavers.xml
new file mode 100644
index 0000000000..00e1d9a1c1
--- /dev/null
+++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/FodyWeavers.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Alterations/20240619130951_V3_2.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Alterations/20240619130951_V3_2.Designer.cs
new file mode 100644
index 0000000000..58a3bc9cae
--- /dev/null
+++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Alterations/20240619130951_V3_2.Designer.cs
@@ -0,0 +1,136 @@
+//
+using System;
+using Elsa.EntityFrameworkCore.Modules.Alterations;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Oracle.EntityFrameworkCore.Metadata;
+
+#nullable disable
+
+namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Alterations
+{
+ [DbContext(typeof(AlterationsElsaDbContext))]
+ [Migration("20240619130951_V3_2")]
+ partial class V3_2
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasDefaultSchema("Elsa")
+ .HasAnnotation("ProductVersion", "7.0.20")
+ .HasAnnotation("Relational:MaxIdentifierLength", 128);
+
+ OracleModelBuilderExtensions.UseIdentityColumns(modelBuilder);
+
+ modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationJob", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("CompletedAt")
+ .HasColumnType("TIMESTAMP(7) WITH TIME ZONE");
+
+ b.Property("CreatedAt")
+ .HasColumnType("TIMESTAMP(7) WITH TIME ZONE");
+
+ b.Property("PlanId")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("SerializedLog")
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("StartedAt")
+ .HasColumnType("TIMESTAMP(7) WITH TIME ZONE");
+
+ b.Property("Status")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("TenantId")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("WorkflowInstanceId")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CompletedAt")
+ .HasDatabaseName("IX_AlterationJob_CompletedAt");
+
+ b.HasIndex("CreatedAt")
+ .HasDatabaseName("IX_AlterationJob_CreatedAt");
+
+ b.HasIndex("PlanId")
+ .HasDatabaseName("IX_AlterationJob_PlanId");
+
+ b.HasIndex("StartedAt")
+ .HasDatabaseName("IX_AlterationJob_StartedAt");
+
+ b.HasIndex("Status")
+ .HasDatabaseName("IX_AlterationJob_Status");
+
+ b.HasIndex("TenantId")
+ .HasDatabaseName("IX_AlterationJob_TenantId");
+
+ b.HasIndex("WorkflowInstanceId")
+ .HasDatabaseName("IX_AlterationJob_WorkflowInstanceId");
+
+ b.ToTable("AlterationJobs", "Elsa");
+ });
+
+ modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationPlan", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("CompletedAt")
+ .HasColumnType("TIMESTAMP(7) WITH TIME ZONE");
+
+ b.Property("CreatedAt")
+ .HasColumnType("TIMESTAMP(7) WITH TIME ZONE");
+
+ b.Property("SerializedAlterations")
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("SerializedWorkflowInstanceFilter")
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("StartedAt")
+ .HasColumnType("TIMESTAMP(7) WITH TIME ZONE");
+
+ b.Property("Status")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("TenantId")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CompletedAt")
+ .HasDatabaseName("IX_AlterationPlan_CompletedAt");
+
+ b.HasIndex("CreatedAt")
+ .HasDatabaseName("IX_AlterationPlan_CreatedAt");
+
+ b.HasIndex("StartedAt")
+ .HasDatabaseName("IX_AlterationPlan_StartedAt");
+
+ b.HasIndex("Status")
+ .HasDatabaseName("IX_AlterationPlan_Status");
+
+ b.HasIndex("TenantId")
+ .HasDatabaseName("IX_AlterationPlan_TenantId");
+
+ b.ToTable("AlterationPlans", "Elsa");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Alterations/20240619130951_V3_2.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Alterations/20240619130951_V3_2.cs
new file mode 100644
index 0000000000..662748a030
--- /dev/null
+++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Alterations/20240619130951_V3_2.cs
@@ -0,0 +1,149 @@
+using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Alterations
+{
+ ///
+ public partial class V3_2 : Migration
+ {
+ private readonly Elsa.EntityFrameworkCore.Common.Contracts.IElsaDbContextSchema _schema;
+
+ ///
+ public V3_2(Elsa.EntityFrameworkCore.Common.Contracts.IElsaDbContextSchema schema)
+ {
+ _schema = schema;
+ }
+
+ ///
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.EnsureSchema(
+ name: "Elsa");
+
+ migrationBuilder.CreateTable(
+ name: "AlterationJobs",
+ schema: _schema.Schema,
+ columns: table => new
+ {
+ Id = table.Column(type: "NVARCHAR2(450)", nullable: false),
+ PlanId = table.Column(type: "NVARCHAR2(450)", nullable: false),
+ WorkflowInstanceId = table.Column(type: "NVARCHAR2(450)", nullable: false),
+ Status = table.Column(type: "NVARCHAR2(450)", nullable: false),
+ CreatedAt = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: false),
+ StartedAt = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: true),
+ CompletedAt = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: true),
+ SerializedLog = table.Column(type: "NVARCHAR2(2000)", nullable: true),
+ TenantId = table.Column(type: "NVARCHAR2(450)", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_AlterationJobs", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "AlterationPlans",
+ schema: _schema.Schema,
+ columns: table => new
+ {
+ Id = table.Column(type: "NVARCHAR2(450)", nullable: false),
+ Status = table.Column(type: "NVARCHAR2(450)", nullable: false),
+ CreatedAt = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: false),
+ StartedAt = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: true),
+ CompletedAt = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: true),
+ SerializedAlterations = table.Column(type: "NVARCHAR2(2000)", nullable: true),
+ SerializedWorkflowInstanceFilter = table.Column(type: "NVARCHAR2(2000)", nullable: true),
+ TenantId = table.Column(type: "NVARCHAR2(450)", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_AlterationPlans", x => x.Id);
+ });
+
+ migrationBuilder.CreateIndex(
+ name: "IX_AlterationJob_CompletedAt",
+ schema: _schema.Schema,
+ table: "AlterationJobs",
+ column: "CompletedAt");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_AlterationJob_CreatedAt",
+ schema: _schema.Schema,
+ table: "AlterationJobs",
+ column: "CreatedAt");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_AlterationJob_PlanId",
+ schema: _schema.Schema,
+ table: "AlterationJobs",
+ column: "PlanId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_AlterationJob_StartedAt",
+ schema: _schema.Schema,
+ table: "AlterationJobs",
+ column: "StartedAt");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_AlterationJob_Status",
+ schema: _schema.Schema,
+ table: "AlterationJobs",
+ column: "Status");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_AlterationJob_TenantId",
+ schema: _schema.Schema,
+ table: "AlterationJobs",
+ column: "TenantId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_AlterationJob_WorkflowInstanceId",
+ schema: _schema.Schema,
+ table: "AlterationJobs",
+ column: "WorkflowInstanceId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_AlterationPlan_CompletedAt",
+ schema: _schema.Schema,
+ table: "AlterationPlans",
+ column: "CompletedAt");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_AlterationPlan_CreatedAt",
+ schema: _schema.Schema,
+ table: "AlterationPlans",
+ column: "CreatedAt");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_AlterationPlan_StartedAt",
+ schema: _schema.Schema,
+ table: "AlterationPlans",
+ column: "StartedAt");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_AlterationPlan_Status",
+ schema: _schema.Schema,
+ table: "AlterationPlans",
+ column: "Status");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_AlterationPlan_TenantId",
+ schema: _schema.Schema,
+ table: "AlterationPlans",
+ column: "TenantId");
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropTable(
+ name: "AlterationJobs",
+ schema: _schema.Schema);
+
+ migrationBuilder.DropTable(
+ name: "AlterationPlans",
+ schema: _schema.Schema);
+ }
+ }
+}
diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Alterations/AlterationsElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Alterations/AlterationsElsaDbContextModelSnapshot.cs
new file mode 100644
index 0000000000..7a7b4f7391
--- /dev/null
+++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Alterations/AlterationsElsaDbContextModelSnapshot.cs
@@ -0,0 +1,133 @@
+//
+using System;
+using Elsa.EntityFrameworkCore.Modules.Alterations;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Oracle.EntityFrameworkCore.Metadata;
+
+#nullable disable
+
+namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Alterations
+{
+ [DbContext(typeof(AlterationsElsaDbContext))]
+ partial class AlterationsElsaDbContextModelSnapshot : ModelSnapshot
+ {
+ protected override void BuildModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasDefaultSchema("Elsa")
+ .HasAnnotation("ProductVersion", "7.0.20")
+ .HasAnnotation("Relational:MaxIdentifierLength", 128);
+
+ OracleModelBuilderExtensions.UseIdentityColumns(modelBuilder);
+
+ modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationJob", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("CompletedAt")
+ .HasColumnType("TIMESTAMP(7) WITH TIME ZONE");
+
+ b.Property("CreatedAt")
+ .HasColumnType("TIMESTAMP(7) WITH TIME ZONE");
+
+ b.Property("PlanId")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("SerializedLog")
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("StartedAt")
+ .HasColumnType("TIMESTAMP(7) WITH TIME ZONE");
+
+ b.Property("Status")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("TenantId")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("WorkflowInstanceId")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CompletedAt")
+ .HasDatabaseName("IX_AlterationJob_CompletedAt");
+
+ b.HasIndex("CreatedAt")
+ .HasDatabaseName("IX_AlterationJob_CreatedAt");
+
+ b.HasIndex("PlanId")
+ .HasDatabaseName("IX_AlterationJob_PlanId");
+
+ b.HasIndex("StartedAt")
+ .HasDatabaseName("IX_AlterationJob_StartedAt");
+
+ b.HasIndex("Status")
+ .HasDatabaseName("IX_AlterationJob_Status");
+
+ b.HasIndex("TenantId")
+ .HasDatabaseName("IX_AlterationJob_TenantId");
+
+ b.HasIndex("WorkflowInstanceId")
+ .HasDatabaseName("IX_AlterationJob_WorkflowInstanceId");
+
+ b.ToTable("AlterationJobs", "Elsa");
+ });
+
+ modelBuilder.Entity("Elsa.Alterations.Core.Entities.AlterationPlan", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("CompletedAt")
+ .HasColumnType("TIMESTAMP(7) WITH TIME ZONE");
+
+ b.Property("CreatedAt")
+ .HasColumnType("TIMESTAMP(7) WITH TIME ZONE");
+
+ b.Property("SerializedAlterations")
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("SerializedWorkflowInstanceFilter")
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("StartedAt")
+ .HasColumnType("TIMESTAMP(7) WITH TIME ZONE");
+
+ b.Property("Status")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("TenantId")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CompletedAt")
+ .HasDatabaseName("IX_AlterationPlan_CompletedAt");
+
+ b.HasIndex("CreatedAt")
+ .HasDatabaseName("IX_AlterationPlan_CreatedAt");
+
+ b.HasIndex("StartedAt")
+ .HasDatabaseName("IX_AlterationPlan_StartedAt");
+
+ b.HasIndex("Status")
+ .HasDatabaseName("IX_AlterationPlan_Status");
+
+ b.HasIndex("TenantId")
+ .HasDatabaseName("IX_AlterationPlan_TenantId");
+
+ b.ToTable("AlterationPlans", "Elsa");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Identity/20240619131023_V3_2.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Identity/20240619131023_V3_2.Designer.cs
new file mode 100644
index 0000000000..31c30a9717
--- /dev/null
+++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Identity/20240619131023_V3_2.Designer.cs
@@ -0,0 +1,149 @@
+//
+using Elsa.EntityFrameworkCore.Modules.Identity;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Oracle.EntityFrameworkCore.Metadata;
+
+#nullable disable
+
+namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Identity
+{
+ [DbContext(typeof(IdentityElsaDbContext))]
+ [Migration("20240619131023_V3_2")]
+ partial class V3_2
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasDefaultSchema("Elsa")
+ .HasAnnotation("ProductVersion", "7.0.20")
+ .HasAnnotation("Relational:MaxIdentifierLength", 128);
+
+ OracleModelBuilderExtensions.UseIdentityColumns(modelBuilder);
+
+ modelBuilder.Entity("Elsa.Identity.Entities.Application", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("ClientId")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("HashedApiKey")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("HashedApiKeySalt")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("HashedClientSecret")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("HashedClientSecretSalt")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("Roles")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(2000)")
+ .HasColumnName("Roles");
+
+ b.Property("TenantId")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ClientId")
+ .IsUnique()
+ .HasDatabaseName("IX_Application_ClientId");
+
+ b.HasIndex("Name")
+ .IsUnique()
+ .HasDatabaseName("IX_Application_Name");
+
+ b.HasIndex("TenantId")
+ .HasDatabaseName("IX_Application_TenantId");
+
+ b.ToTable("Applications", "Elsa");
+ });
+
+ modelBuilder.Entity("Elsa.Identity.Entities.Role", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("Permissions")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(2000)")
+ .HasColumnName("Permissions");
+
+ b.Property("TenantId")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Name")
+ .IsUnique()
+ .HasDatabaseName("IX_Role_Name");
+
+ b.HasIndex("TenantId")
+ .HasDatabaseName("IX_Role_TenantId");
+
+ b.ToTable("Roles", "Elsa");
+ });
+
+ modelBuilder.Entity("Elsa.Identity.Entities.User", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("HashedPassword")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("HashedPasswordSalt")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("Roles")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(2000)")
+ .HasColumnName("Roles");
+
+ b.Property("TenantId")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Name")
+ .IsUnique()
+ .HasDatabaseName("IX_User_Name");
+
+ b.HasIndex("TenantId")
+ .HasDatabaseName("IX_User_TenantId");
+
+ b.ToTable("Users", "Elsa");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Identity/20240619131023_V3_2.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Identity/20240619131023_V3_2.cs
new file mode 100644
index 0000000000..d43e759245
--- /dev/null
+++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Identity/20240619131023_V3_2.cs
@@ -0,0 +1,139 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Identity
+{
+ ///
+ public partial class V3_2 : Migration
+ {
+ private readonly Elsa.EntityFrameworkCore.Common.Contracts.IElsaDbContextSchema _schema;
+
+ ///
+ public V3_2(Elsa.EntityFrameworkCore.Common.Contracts.IElsaDbContextSchema schema)
+ {
+ _schema = schema;
+ }
+
+ ///
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.EnsureSchema(
+ name: "Elsa");
+
+ migrationBuilder.CreateTable(
+ name: "Applications",
+ schema: _schema.Schema,
+ columns: table => new
+ {
+ Id = table.Column(type: "NVARCHAR2(450)", nullable: false),
+ ClientId = table.Column(type: "NVARCHAR2(450)", nullable: false),
+ HashedClientSecret = table.Column(type: "NVARCHAR2(2000)", nullable: false),
+ HashedClientSecretSalt = table.Column(type: "NVARCHAR2(2000)", nullable: false),
+ Name = table.Column(type: "NVARCHAR2(450)", nullable: false),
+ HashedApiKey = table.Column(type: "NVARCHAR2(2000)", nullable: false),
+ HashedApiKeySalt = table.Column(type: "NVARCHAR2(2000)", nullable: false),
+ Roles = table.Column(type: "NVARCHAR2(2000)", nullable: false),
+ TenantId = table.Column(type: "NVARCHAR2(450)", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Applications", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Roles",
+ schema: _schema.Schema,
+ columns: table => new
+ {
+ Id = table.Column(type: "NVARCHAR2(450)", nullable: false),
+ Name = table.Column(type: "NVARCHAR2(450)", nullable: false),
+ Permissions = table.Column(type: "NVARCHAR2(2000)", nullable: false),
+ TenantId = table.Column(type: "NVARCHAR2(450)", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Roles", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Users",
+ schema: _schema.Schema,
+ columns: table => new
+ {
+ Id = table.Column(type: "NVARCHAR2(450)", nullable: false),
+ Name = table.Column(type: "NVARCHAR2(450)", nullable: false),
+ HashedPassword = table.Column(type: "NVARCHAR2(2000)", nullable: false),
+ HashedPasswordSalt = table.Column(type: "NVARCHAR2(2000)", nullable: false),
+ Roles = table.Column(type: "NVARCHAR2(2000)", nullable: false),
+ TenantId = table.Column(type: "NVARCHAR2(450)", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Users", x => x.Id);
+ });
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Application_ClientId",
+ schema: _schema.Schema,
+ table: "Applications",
+ column: "ClientId",
+ unique: true);
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Application_Name",
+ schema: _schema.Schema,
+ table: "Applications",
+ column: "Name",
+ unique: true);
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Application_TenantId",
+ schema: _schema.Schema,
+ table: "Applications",
+ column: "TenantId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Role_Name",
+ schema: _schema.Schema,
+ table: "Roles",
+ column: "Name",
+ unique: true);
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Role_TenantId",
+ schema: _schema.Schema,
+ table: "Roles",
+ column: "TenantId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_User_Name",
+ schema: _schema.Schema,
+ table: "Users",
+ column: "Name",
+ unique: true);
+
+ migrationBuilder.CreateIndex(
+ name: "IX_User_TenantId",
+ schema: _schema.Schema,
+ table: "Users",
+ column: "TenantId");
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropTable(
+ name: "Applications",
+ schema: _schema.Schema);
+
+ migrationBuilder.DropTable(
+ name: "Roles",
+ schema: _schema.Schema);
+
+ migrationBuilder.DropTable(
+ name: "Users",
+ schema: _schema.Schema);
+ }
+ }
+}
diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Identity/IdentityElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Identity/IdentityElsaDbContextModelSnapshot.cs
new file mode 100644
index 0000000000..6b6a40e5af
--- /dev/null
+++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Identity/IdentityElsaDbContextModelSnapshot.cs
@@ -0,0 +1,146 @@
+//
+using Elsa.EntityFrameworkCore.Modules.Identity;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Oracle.EntityFrameworkCore.Metadata;
+
+#nullable disable
+
+namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Identity
+{
+ [DbContext(typeof(IdentityElsaDbContext))]
+ partial class IdentityElsaDbContextModelSnapshot : ModelSnapshot
+ {
+ protected override void BuildModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasDefaultSchema("Elsa")
+ .HasAnnotation("ProductVersion", "7.0.20")
+ .HasAnnotation("Relational:MaxIdentifierLength", 128);
+
+ OracleModelBuilderExtensions.UseIdentityColumns(modelBuilder);
+
+ modelBuilder.Entity("Elsa.Identity.Entities.Application", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("ClientId")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("HashedApiKey")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("HashedApiKeySalt")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("HashedClientSecret")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("HashedClientSecretSalt")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("Roles")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(2000)")
+ .HasColumnName("Roles");
+
+ b.Property("TenantId")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ClientId")
+ .IsUnique()
+ .HasDatabaseName("IX_Application_ClientId");
+
+ b.HasIndex("Name")
+ .IsUnique()
+ .HasDatabaseName("IX_Application_Name");
+
+ b.HasIndex("TenantId")
+ .HasDatabaseName("IX_Application_TenantId");
+
+ b.ToTable("Applications", "Elsa");
+ });
+
+ modelBuilder.Entity("Elsa.Identity.Entities.Role", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("Permissions")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(2000)")
+ .HasColumnName("Permissions");
+
+ b.Property("TenantId")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Name")
+ .IsUnique()
+ .HasDatabaseName("IX_Role_Name");
+
+ b.HasIndex("TenantId")
+ .HasDatabaseName("IX_Role_TenantId");
+
+ b.ToTable("Roles", "Elsa");
+ });
+
+ modelBuilder.Entity("Elsa.Identity.Entities.User", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("HashedPassword")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("HashedPasswordSalt")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("Roles")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(2000)")
+ .HasColumnName("Roles");
+
+ b.Property("TenantId")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Name")
+ .IsUnique()
+ .HasDatabaseName("IX_User_Name");
+
+ b.HasIndex("TenantId")
+ .HasDatabaseName("IX_User_TenantId");
+
+ b.ToTable("Users", "Elsa");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Labels/20240619131032_V3_2.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Labels/20240619131032_V3_2.Designer.cs
new file mode 100644
index 0000000000..08254ad00f
--- /dev/null
+++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Labels/20240619131032_V3_2.Designer.cs
@@ -0,0 +1,94 @@
+//
+using Elsa.EntityFrameworkCore.Modules.Labels;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Oracle.EntityFrameworkCore.Metadata;
+
+#nullable disable
+
+namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Labels
+{
+ [DbContext(typeof(LabelsElsaDbContext))]
+ [Migration("20240619131032_V3_2")]
+ partial class V3_2
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasDefaultSchema("Elsa")
+ .HasAnnotation("ProductVersion", "7.0.20")
+ .HasAnnotation("Relational:MaxIdentifierLength", 128);
+
+ OracleModelBuilderExtensions.UseIdentityColumns(modelBuilder);
+
+ modelBuilder.Entity("Elsa.Labels.Entities.Label", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("Color")
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("Description")
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("NormalizedName")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("TenantId")
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.HasKey("Id");
+
+ b.ToTable("Labels", "Elsa");
+ });
+
+ modelBuilder.Entity("Elsa.Labels.Entities.WorkflowDefinitionLabel", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("LabelId")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("TenantId")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("WorkflowDefinitionId")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("WorkflowDefinitionVersionId")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("LabelId")
+ .HasDatabaseName("WorkflowDefinitionLabel_LabelId");
+
+ b.HasIndex("TenantId")
+ .HasDatabaseName("WorkflowDefinitionLabel_TenantId");
+
+ b.HasIndex("WorkflowDefinitionId")
+ .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionId");
+
+ b.HasIndex("WorkflowDefinitionVersionId")
+ .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionVersionId");
+
+ b.ToTable("WorkflowDefinitionLabels", "Elsa");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Labels/20240619131032_V3_2.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Labels/20240619131032_V3_2.cs
new file mode 100644
index 0000000000..8a3c17cd8b
--- /dev/null
+++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Labels/20240619131032_V3_2.cs
@@ -0,0 +1,94 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Labels
+{
+ ///
+ public partial class V3_2 : Migration
+ {
+ private readonly Elsa.EntityFrameworkCore.Common.Contracts.IElsaDbContextSchema _schema;
+
+ ///
+ public V3_2(Elsa.EntityFrameworkCore.Common.Contracts.IElsaDbContextSchema schema)
+ {
+ _schema = schema;
+ }
+
+ ///
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.EnsureSchema(
+ name: "Elsa");
+
+ migrationBuilder.CreateTable(
+ name: "Labels",
+ schema: _schema.Schema,
+ columns: table => new
+ {
+ Id = table.Column(type: "NVARCHAR2(450)", nullable: false),
+ Name = table.Column(type: "NVARCHAR2(2000)", nullable: false),
+ NormalizedName = table.Column(type: "NVARCHAR2(2000)", nullable: false),
+ Description = table.Column(type: "NVARCHAR2(2000)", nullable: true),
+ Color = table.Column(type: "NVARCHAR2(2000)", nullable: true),
+ TenantId = table.Column(type: "NVARCHAR2(2000)", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Labels", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "WorkflowDefinitionLabels",
+ schema: _schema.Schema,
+ columns: table => new
+ {
+ Id = table.Column(type: "NVARCHAR2(450)", nullable: false),
+ WorkflowDefinitionId = table.Column(type: "NVARCHAR2(450)", nullable: false),
+ WorkflowDefinitionVersionId = table.Column(type: "NVARCHAR2(450)", nullable: false),
+ LabelId = table.Column(type: "NVARCHAR2(450)", nullable: false),
+ TenantId = table.Column(type: "NVARCHAR2(450)", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_WorkflowDefinitionLabels", x => x.Id);
+ });
+
+ migrationBuilder.CreateIndex(
+ name: "WorkflowDefinitionLabel_LabelId",
+ schema: _schema.Schema,
+ table: "WorkflowDefinitionLabels",
+ column: "LabelId");
+
+ migrationBuilder.CreateIndex(
+ name: "WorkflowDefinitionLabel_TenantId",
+ schema: _schema.Schema,
+ table: "WorkflowDefinitionLabels",
+ column: "TenantId");
+
+ migrationBuilder.CreateIndex(
+ name: "WorkflowDefinitionLabel_WorkflowDefinitionId",
+ schema: _schema.Schema,
+ table: "WorkflowDefinitionLabels",
+ column: "WorkflowDefinitionId");
+
+ migrationBuilder.CreateIndex(
+ name: "WorkflowDefinitionLabel_WorkflowDefinitionVersionId",
+ schema: _schema.Schema,
+ table: "WorkflowDefinitionLabels",
+ column: "WorkflowDefinitionVersionId");
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropTable(
+ name: "Labels",
+ schema: _schema.Schema);
+
+ migrationBuilder.DropTable(
+ name: "WorkflowDefinitionLabels",
+ schema: _schema.Schema);
+ }
+ }
+}
diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Labels/LabelsElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Labels/LabelsElsaDbContextModelSnapshot.cs
new file mode 100644
index 0000000000..8ff391a49f
--- /dev/null
+++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Labels/LabelsElsaDbContextModelSnapshot.cs
@@ -0,0 +1,91 @@
+//
+using Elsa.EntityFrameworkCore.Modules.Labels;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Oracle.EntityFrameworkCore.Metadata;
+
+#nullable disable
+
+namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Labels
+{
+ [DbContext(typeof(LabelsElsaDbContext))]
+ partial class LabelsElsaDbContextModelSnapshot : ModelSnapshot
+ {
+ protected override void BuildModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasDefaultSchema("Elsa")
+ .HasAnnotation("ProductVersion", "7.0.20")
+ .HasAnnotation("Relational:MaxIdentifierLength", 128);
+
+ OracleModelBuilderExtensions.UseIdentityColumns(modelBuilder);
+
+ modelBuilder.Entity("Elsa.Labels.Entities.Label", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("Color")
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("Description")
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("NormalizedName")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("TenantId")
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.HasKey("Id");
+
+ b.ToTable("Labels", "Elsa");
+ });
+
+ modelBuilder.Entity("Elsa.Labels.Entities.WorkflowDefinitionLabel", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("LabelId")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("TenantId")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("WorkflowDefinitionId")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("WorkflowDefinitionVersionId")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("LabelId")
+ .HasDatabaseName("WorkflowDefinitionLabel_LabelId");
+
+ b.HasIndex("TenantId")
+ .HasDatabaseName("WorkflowDefinitionLabel_TenantId");
+
+ b.HasIndex("WorkflowDefinitionId")
+ .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionId");
+
+ b.HasIndex("WorkflowDefinitionVersionId")
+ .HasDatabaseName("WorkflowDefinitionLabel_WorkflowDefinitionVersionId");
+
+ b.ToTable("WorkflowDefinitionLabels", "Elsa");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Management/20240619131013_V3_2.Designer.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Management/20240619131013_V3_2.Designer.cs
new file mode 100644
index 0000000000..f0d1046059
--- /dev/null
+++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Management/20240619131013_V3_2.Designer.cs
@@ -0,0 +1,226 @@
+//
+using System;
+using Elsa.EntityFrameworkCore.Modules.Management;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Oracle.EntityFrameworkCore.Metadata;
+
+#nullable disable
+
+namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Management
+{
+ [DbContext(typeof(ManagementElsaDbContext))]
+ [Migration("20240619131013_V3_2")]
+ partial class V3_2
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasDefaultSchema("Elsa")
+ .HasAnnotation("ProductVersion", "7.0.20")
+ .HasAnnotation("Relational:MaxIdentifierLength", 128);
+
+ OracleModelBuilderExtensions.UseIdentityColumns(modelBuilder);
+
+ modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowDefinition", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("BinaryData")
+ .HasColumnType("RAW(2000)");
+
+ b.Property("CreatedAt")
+ .HasColumnType("TIMESTAMP(7) WITH TIME ZONE");
+
+ b.Property("Data")
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("DefinitionId")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("Description")
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("IsLatest")
+ .HasColumnType("NUMBER(1)");
+
+ b.Property("IsPublished")
+ .HasColumnType("NUMBER(1)");
+
+ b.Property("IsReadonly")
+ .HasColumnType("NUMBER(1)");
+
+ b.Property("IsSystem")
+ .HasColumnType("NUMBER(1)");
+
+ b.Property("MaterializerContext")
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("MaterializerName")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("Name")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("ProviderName")
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("StringData")
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("TenantId")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("ToolVersion")
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("UsableAsActivity")
+ .HasColumnType("NUMBER(1)");
+
+ b.Property("Version")
+ .HasColumnType("NUMBER(10)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("IsLatest")
+ .HasDatabaseName("IX_WorkflowDefinition_IsLatest");
+
+ b.HasIndex("IsPublished")
+ .HasDatabaseName("IX_WorkflowDefinition_IsPublished");
+
+ b.HasIndex("IsSystem")
+ .HasDatabaseName("IX_WorkflowDefinition_IsSystem");
+
+ b.HasIndex("Name")
+ .HasDatabaseName("IX_WorkflowDefinition_Name");
+
+ b.HasIndex("TenantId")
+ .HasDatabaseName("IX_WorkflowDefinition_TenantId");
+
+ b.HasIndex("UsableAsActivity")
+ .HasDatabaseName("IX_WorkflowDefinition_UsableAsActivity");
+
+ b.HasIndex("Version")
+ .HasDatabaseName("IX_WorkflowDefinition_Version");
+
+ b.HasIndex("DefinitionId", "Version")
+ .IsUnique()
+ .HasDatabaseName("IX_WorkflowDefinition_DefinitionId_Version");
+
+ b.ToTable("WorkflowDefinitions", "Elsa");
+ });
+
+ modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowInstance", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("CorrelationId")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("CreatedAt")
+ .HasColumnType("TIMESTAMP(7) WITH TIME ZONE");
+
+ b.Property("Data")
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("DataCompressionAlgorithm")
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("DefinitionId")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("DefinitionVersionId")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("FinishedAt")
+ .HasColumnType("TIMESTAMP(7) WITH TIME ZONE");
+
+ b.Property("IncidentCount")
+ .HasColumnType("NUMBER(10)");
+
+ b.Property("IsSystem")
+ .HasColumnType("NUMBER(1)");
+
+ b.Property("Name")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("ParentWorkflowInstanceId")
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("Status")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("SubStatus")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("TenantId")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("TIMESTAMP(7) WITH TIME ZONE");
+
+ b.Property("Version")
+ .HasColumnType("NUMBER(10)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CorrelationId")
+ .HasDatabaseName("IX_WorkflowInstance_CorrelationId");
+
+ b.HasIndex("CreatedAt")
+ .HasDatabaseName("IX_WorkflowInstance_CreatedAt");
+
+ b.HasIndex("DefinitionId")
+ .HasDatabaseName("IX_WorkflowInstance_DefinitionId");
+
+ b.HasIndex("FinishedAt")
+ .HasDatabaseName("IX_WorkflowInstance_FinishedAt");
+
+ b.HasIndex("IsSystem")
+ .HasDatabaseName("IX_WorkflowInstance_IsSystem");
+
+ b.HasIndex("Name")
+ .HasDatabaseName("IX_WorkflowInstance_Name");
+
+ b.HasIndex("Status")
+ .HasDatabaseName("IX_WorkflowInstance_Status");
+
+ b.HasIndex("SubStatus")
+ .HasDatabaseName("IX_WorkflowInstance_SubStatus");
+
+ b.HasIndex("TenantId")
+ .HasDatabaseName("IX_WorkflowInstance_TenantId");
+
+ b.HasIndex("UpdatedAt")
+ .HasDatabaseName("IX_WorkflowInstance_UpdatedAt");
+
+ b.HasIndex("Status", "DefinitionId")
+ .HasDatabaseName("IX_WorkflowInstance_Status_DefinitionId");
+
+ b.HasIndex("Status", "SubStatus")
+ .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus");
+
+ b.HasIndex("SubStatus", "DefinitionId")
+ .HasDatabaseName("IX_WorkflowInstance_SubStatus_DefinitionId");
+
+ b.HasIndex("Status", "SubStatus", "DefinitionId", "Version")
+ .HasDatabaseName("IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version");
+
+ b.ToTable("WorkflowInstances", "Elsa");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Management/20240619131013_V3_2.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Management/20240619131013_V3_2.cs
new file mode 100644
index 0000000000..7ce7bc207a
--- /dev/null
+++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Management/20240619131013_V3_2.cs
@@ -0,0 +1,229 @@
+using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Management
+{
+ ///
+ public partial class V3_2 : Migration
+ {
+ private readonly Elsa.EntityFrameworkCore.Common.Contracts.IElsaDbContextSchema _schema;
+
+ ///
+ public V3_2(Elsa.EntityFrameworkCore.Common.Contracts.IElsaDbContextSchema schema)
+ {
+ _schema = schema;
+ }
+
+ ///
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.EnsureSchema(
+ name: "Elsa");
+
+ migrationBuilder.CreateTable(
+ name: "WorkflowDefinitions",
+ schema: _schema.Schema,
+ columns: table => new
+ {
+ Id = table.Column(type: "NVARCHAR2(450)", nullable: false),
+ DefinitionId = table.Column(type: "NVARCHAR2(450)", nullable: false),
+ Name = table.Column(type: "NVARCHAR2(450)", nullable: true),
+ Description = table.Column(type: "NVARCHAR2(2000)", nullable: true),
+ ToolVersion = table.Column(type: "NVARCHAR2(2000)", nullable: true),
+ ProviderName = table.Column(type: "NVARCHAR2(2000)", nullable: true),
+ MaterializerName = table.Column(type: "NVARCHAR2(2000)", nullable: false),
+ MaterializerContext = table.Column(type: "NVARCHAR2(2000)", nullable: true),
+ StringData = table.Column(type: "NVARCHAR2(2000)", nullable: true),
+ BinaryData = table.Column(type: "RAW(2000)", nullable: true),
+ IsReadonly = table.Column(type: "NUMBER(1)", nullable: false),
+ IsSystem = table.Column(type: "NUMBER(1)", nullable: false),
+ Data = table.Column(type: "NVARCHAR2(2000)", nullable: true),
+ UsableAsActivity = table.Column(type: "NUMBER(1)", nullable: true),
+ TenantId = table.Column(type: "NVARCHAR2(450)", nullable: true),
+ CreatedAt = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: false),
+ Version = table.Column(type: "NUMBER(10)", nullable: false),
+ IsLatest = table.Column(type: "NUMBER(1)", nullable: false),
+ IsPublished = table.Column(type: "NUMBER(1)", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_WorkflowDefinitions", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "WorkflowInstances",
+ schema: _schema.Schema,
+ columns: table => new
+ {
+ Id = table.Column(type: "NVARCHAR2(450)", nullable: false),
+ DefinitionId = table.Column(type: "NVARCHAR2(450)", nullable: false),
+ DefinitionVersionId = table.Column(type: "NVARCHAR2(2000)", nullable: false),
+ Version = table.Column(type: "NUMBER(10)", nullable: false),
+ ParentWorkflowInstanceId = table.Column(type: "NVARCHAR2(2000)", nullable: true),
+ Status = table.Column(type: "NVARCHAR2(450)", nullable: false),
+ SubStatus = table.Column(type: "NVARCHAR2(450)", nullable: false),
+ CorrelationId = table.Column(type: "NVARCHAR2(450)", nullable: true),
+ Name = table.Column(type: "NVARCHAR2(450)", nullable: true),
+ IncidentCount = table.Column(type: "NUMBER(10)", nullable: false),
+ IsSystem = table.Column(type: "NUMBER(1)", nullable: false),
+ CreatedAt = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: false),
+ UpdatedAt = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: false),
+ FinishedAt = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: true),
+ Data = table.Column(type: "NVARCHAR2(2000)", nullable: true),
+ DataCompressionAlgorithm = table.Column(type: "NVARCHAR2(2000)", nullable: true),
+ TenantId = table.Column(type: "NVARCHAR2(450)", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_WorkflowInstances", x => x.Id);
+ });
+
+ migrationBuilder.CreateIndex(
+ name: "IX_WorkflowDefinition_DefinitionId_Version",
+ schema: _schema.Schema,
+ table: "WorkflowDefinitions",
+ columns: new[] { "DefinitionId", "Version" },
+ unique: true);
+
+ migrationBuilder.CreateIndex(
+ name: "IX_WorkflowDefinition_IsLatest",
+ schema: _schema.Schema,
+ table: "WorkflowDefinitions",
+ column: "IsLatest");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_WorkflowDefinition_IsPublished",
+ schema: _schema.Schema,
+ table: "WorkflowDefinitions",
+ column: "IsPublished");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_WorkflowDefinition_IsSystem",
+ schema: _schema.Schema,
+ table: "WorkflowDefinitions",
+ column: "IsSystem");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_WorkflowDefinition_Name",
+ schema: _schema.Schema,
+ table: "WorkflowDefinitions",
+ column: "Name");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_WorkflowDefinition_TenantId",
+ schema: _schema.Schema,
+ table: "WorkflowDefinitions",
+ column: "TenantId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_WorkflowDefinition_UsableAsActivity",
+ schema: _schema.Schema,
+ table: "WorkflowDefinitions",
+ column: "UsableAsActivity");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_WorkflowDefinition_Version",
+ schema: _schema.Schema,
+ table: "WorkflowDefinitions",
+ column: "Version");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_WorkflowInstance_CorrelationId",
+ schema: _schema.Schema,
+ table: "WorkflowInstances",
+ column: "CorrelationId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_WorkflowInstance_CreatedAt",
+ schema: _schema.Schema,
+ table: "WorkflowInstances",
+ column: "CreatedAt");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_WorkflowInstance_DefinitionId",
+ schema: _schema.Schema,
+ table: "WorkflowInstances",
+ column: "DefinitionId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_WorkflowInstance_FinishedAt",
+ schema: _schema.Schema,
+ table: "WorkflowInstances",
+ column: "FinishedAt");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_WorkflowInstance_IsSystem",
+ schema: _schema.Schema,
+ table: "WorkflowInstances",
+ column: "IsSystem");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_WorkflowInstance_Name",
+ schema: _schema.Schema,
+ table: "WorkflowInstances",
+ column: "Name");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_WorkflowInstance_Status",
+ schema: _schema.Schema,
+ table: "WorkflowInstances",
+ column: "Status");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_WorkflowInstance_Status_DefinitionId",
+ schema: _schema.Schema,
+ table: "WorkflowInstances",
+ columns: new[] { "Status", "DefinitionId" });
+
+ migrationBuilder.CreateIndex(
+ name: "IX_WorkflowInstance_Status_SubStatus",
+ schema: _schema.Schema,
+ table: "WorkflowInstances",
+ columns: new[] { "Status", "SubStatus" });
+
+ migrationBuilder.CreateIndex(
+ name: "IX_WorkflowInstance_Status_SubStatus_DefinitionId_Version",
+ schema: _schema.Schema,
+ table: "WorkflowInstances",
+ columns: new[] { "Status", "SubStatus", "DefinitionId", "Version" });
+
+ migrationBuilder.CreateIndex(
+ name: "IX_WorkflowInstance_SubStatus",
+ schema: _schema.Schema,
+ table: "WorkflowInstances",
+ column: "SubStatus");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_WorkflowInstance_SubStatus_DefinitionId",
+ schema: _schema.Schema,
+ table: "WorkflowInstances",
+ columns: new[] { "SubStatus", "DefinitionId" });
+
+ migrationBuilder.CreateIndex(
+ name: "IX_WorkflowInstance_TenantId",
+ schema: _schema.Schema,
+ table: "WorkflowInstances",
+ column: "TenantId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_WorkflowInstance_UpdatedAt",
+ schema: _schema.Schema,
+ table: "WorkflowInstances",
+ column: "UpdatedAt");
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropTable(
+ name: "WorkflowDefinitions",
+ schema: _schema.Schema);
+
+ migrationBuilder.DropTable(
+ name: "WorkflowInstances",
+ schema: _schema.Schema);
+ }
+ }
+}
diff --git a/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Management/ManagementElsaDbContextModelSnapshot.cs b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Management/ManagementElsaDbContextModelSnapshot.cs
new file mode 100644
index 0000000000..d28aebf43b
--- /dev/null
+++ b/src/modules/Elsa.EntityFrameworkCore.Oracle/Migrations/Management/ManagementElsaDbContextModelSnapshot.cs
@@ -0,0 +1,223 @@
+//
+using System;
+using Elsa.EntityFrameworkCore.Modules.Management;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Oracle.EntityFrameworkCore.Metadata;
+
+#nullable disable
+
+namespace Elsa.EntityFrameworkCore.Oracle.Migrations.Management
+{
+ [DbContext(typeof(ManagementElsaDbContext))]
+ partial class ManagementElsaDbContextModelSnapshot : ModelSnapshot
+ {
+ protected override void BuildModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasDefaultSchema("Elsa")
+ .HasAnnotation("ProductVersion", "7.0.20")
+ .HasAnnotation("Relational:MaxIdentifierLength", 128);
+
+ OracleModelBuilderExtensions.UseIdentityColumns(modelBuilder);
+
+ modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowDefinition", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("BinaryData")
+ .HasColumnType("RAW(2000)");
+
+ b.Property("CreatedAt")
+ .HasColumnType("TIMESTAMP(7) WITH TIME ZONE");
+
+ b.Property("Data")
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("DefinitionId")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("Description")
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("IsLatest")
+ .HasColumnType("NUMBER(1)");
+
+ b.Property("IsPublished")
+ .HasColumnType("NUMBER(1)");
+
+ b.Property("IsReadonly")
+ .HasColumnType("NUMBER(1)");
+
+ b.Property("IsSystem")
+ .HasColumnType("NUMBER(1)");
+
+ b.Property("MaterializerContext")
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("MaterializerName")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("Name")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("ProviderName")
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("StringData")
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("TenantId")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("ToolVersion")
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("UsableAsActivity")
+ .HasColumnType("NUMBER(1)");
+
+ b.Property("Version")
+ .HasColumnType("NUMBER(10)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("IsLatest")
+ .HasDatabaseName("IX_WorkflowDefinition_IsLatest");
+
+ b.HasIndex("IsPublished")
+ .HasDatabaseName("IX_WorkflowDefinition_IsPublished");
+
+ b.HasIndex("IsSystem")
+ .HasDatabaseName("IX_WorkflowDefinition_IsSystem");
+
+ b.HasIndex("Name")
+ .HasDatabaseName("IX_WorkflowDefinition_Name");
+
+ b.HasIndex("TenantId")
+ .HasDatabaseName("IX_WorkflowDefinition_TenantId");
+
+ b.HasIndex("UsableAsActivity")
+ .HasDatabaseName("IX_WorkflowDefinition_UsableAsActivity");
+
+ b.HasIndex("Version")
+ .HasDatabaseName("IX_WorkflowDefinition_Version");
+
+ b.HasIndex("DefinitionId", "Version")
+ .IsUnique()
+ .HasDatabaseName("IX_WorkflowDefinition_DefinitionId_Version");
+
+ b.ToTable("WorkflowDefinitions", "Elsa");
+ });
+
+ modelBuilder.Entity("Elsa.Workflows.Management.Entities.WorkflowInstance", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("CorrelationId")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("CreatedAt")
+ .HasColumnType("TIMESTAMP(7) WITH TIME ZONE");
+
+ b.Property("Data")
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("DataCompressionAlgorithm")
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("DefinitionId")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("DefinitionVersionId")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("FinishedAt")
+ .HasColumnType("TIMESTAMP(7) WITH TIME ZONE");
+
+ b.Property("IncidentCount")
+ .HasColumnType("NUMBER(10)");
+
+ b.Property("IsSystem")
+ .HasColumnType("NUMBER(1)");
+
+ b.Property("Name")
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property("ParentWorkflowInstanceId")
+ .HasColumnType("NVARCHAR2(2000)");
+
+ b.Property("Status")
+ .IsRequired()
+ .HasColumnType("NVARCHAR2(450)");
+
+ b.Property