From 726c16b702efb0c736a13300c9a55dac2f153534 Mon Sep 17 00:00:00 2001 From: Akbar Ghasemi Tazehabadi <46082076+akghasemi@users.noreply.github.com> Date: Tue, 20 Jul 2021 12:49:46 +0200 Subject: [PATCH] Added support of Oracle as persistence EF Provider (#1275) * Added support of Oracle as persistence database provider * Added migration for Oracle * Fixed bugs in oracle data types * fixing some comments --- Elsa.sln | 25 ++ .../DbContextOptionsBuilderExtensions.cs | 17 + ....Persistence.EntityFramework.Oracle.csproj | 32 ++ .../FodyWeavers.xml | 3 + .../20210707065825_Initial.Designer.cs | 314 +++++++++++++++++ .../Migrations/20210707065825_Initial.cs | 325 ++++++++++++++++++ .../Migrations/ElsaContextModelSnapshot.cs | 312 +++++++++++++++++ .../OracleElsaContextFactory.cs | 26 ++ .../Readme.md | 14 + 9 files changed, 1068 insertions(+) create mode 100644 src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/DbContextOptionsBuilderExtensions.cs create mode 100644 src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/Elsa.Persistence.EntityFramework.Oracle.csproj create mode 100644 src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/FodyWeavers.xml create mode 100644 src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/Migrations/20210707065825_Initial.Designer.cs create mode 100644 src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/Migrations/20210707065825_Initial.cs create mode 100644 src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/Migrations/ElsaContextModelSnapshot.cs create mode 100644 src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/OracleElsaContextFactory.cs create mode 100644 src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/Readme.md diff --git a/Elsa.sln b/Elsa.sln index e6cd9cd2f..7d9aa8640 100644 --- a/Elsa.sln +++ b/Elsa.sln @@ -229,6 +229,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.DistributedLocking.Azu EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "blazor", "blazor", "{D86B94DC-A53C-4A67-A820-828DD359C49B}" EndProject + +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "aspnetcore", "aspnetcore", "{C869CC72-9A98-4246-9A76-6A50F48AFD85}" +EndProject + Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ElsaDashboard.Samples.AspNetCore.Monolith", "src\samples\dashboard\aspnetcore\ElsaDashboard.Samples.AspNetCore.Monolith\ElsaDashboard.Samples.AspNetCore.Monolith.csproj", "{F1EF5639-021A-4D22-9D4A-73D57C88EBFA}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.Persistence.YesSql", "src\samples\persistence\Elsa.Samples.Persistence.YesSql\Elsa.Samples.Persistence.YesSql.csproj", "{3A30EFFE-32D8-40B8-9C62-427037BB5424}" @@ -243,6 +247,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docker", "docker", "{D7F754 docker\Dockerfile-elsa-dashboard-and-server = docker\Dockerfile-elsa-dashboard-and-server docker\README.md = docker\README.md EndProjectSection + EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Persistence.EntityFramework.MySql", "src\persistence\Elsa.Persistence.EntityFramework\Elsa.Persistence.EntityFramework.MySql\Elsa.Persistence.EntityFramework.MySql.csproj", "{D55BC08B-CA82-478A-99F7-EDE90AC33160}" EndProject @@ -262,12 +267,15 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "aspnetcore", "aspnetcore", docker\Dockerfile-elsa-dashboard-and-server = docker\Dockerfile-elsa-dashboard-and-server docker\README.md = docker\README.md EndProjectSection + EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "github", "github", "{3BF2C5A9-AC69-4587-833F-C16CFC97E100}" ProjectSection(SolutionItems) = preProject .github\workflows\publish-latest-dashboard-and-server-docker.yml = .github\workflows\publish-latest-dashboard-and-server-docker.yml .github\workflows\publish-latest-dashboard-docker.yml = .github\workflows\publish-latest-dashboard-docker.yml + .github\workflows\publish-latest-designer-npm.yml = .github\workflows\publish-latest-designer-npm.yml + .github\workflows\publish-latest-server-docker.yml = .github\workflows\publish-latest-server-docker.yml EndProjectSection EndProject @@ -280,6 +288,7 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "providers", "providers", "{EC5D4AFD-3F7F-4B51-9C38-F18C60618731}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Providers.Redis", "src\providers\Elsa.Providers.Redis\Elsa.Providers.Redis.csproj", "{9ACA06DA-9AFE-41A2-8109-EFED8B9B14A1}" + EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.DistributedLocking.Redis", "src\locking\Elsa.DistributedLocking.Redis\Elsa.DistributedLocking.Redis.csproj", "{D1644D32-AA51-4D10-942E-F2722DB963B4}" EndProject @@ -309,6 +318,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Webhooks.Persistence.Y EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ElsaDashboard.Web", "src\dashboards\ElsaDashboard\ElsaDashboard.Web.csproj", "{1129868E-BA72-44C4-941C-A28D9001504B}" EndProject + Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ElsaDashboard.Samples.BlazorWasm", "src\samples\dashboard\blazor\ElsaDashboard.Samples.BlazorWasm\ElsaDashboard.Samples.BlazorWasm.csproj", "{24A99602-F743-4B1A-AC96-599F34AE916C}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "html", "html", "{8E6215AB-FDD3-4011-B598-B6BB63F294BB}" @@ -319,6 +329,9 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "html", "html", "{8E6215AB-F EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ElsaDashboard.Samples.BlazorServer", "src\samples\dashboard\blazor\ElsaDashboard.Samples.BlazorServer\ElsaDashboard.Samples.BlazorServer.csproj", "{6A03B177-09E0-4421-9704-945E6248AB69}" EndProject + +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Persistence.EntityFramework.Oracle", "src\persistence\Elsa.Persistence.EntityFramework\Elsa.Persistence.EntityFramework.Oracle\Elsa.Persistence.EntityFramework.Oracle.csproj", "{FE6FC5F9-349A-4A3A-B291-CE0614030D5C}" +EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.FaultyWorkflows", "src\samples\aspnet\Elsa.Samples.FaultyWorkflows\Elsa.Samples.FaultyWorkflows.csproj", "{84751112-C2B7-41D4-98F5-D87D7C2E1DAE}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Activities.Conductor", "src\activities\Elsa.Activities.Conductor\Elsa.Activities.Conductor.csproj", "{4D4022DD-244B-47EE-95FA-7071EC687B24}" @@ -328,6 +341,7 @@ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.CustomTenantIdSource", "src\samples\aspnet\Elsa.Samples.CustomTenantIdSource\Elsa.Samples.CustomTenantIdSource.csproj", "{6E191628-927B-42FB-8805-D2977D8FC4E3}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElsaDashboard.Samples.AspNetCore.SubPath", "src\samples\dashboard\aspnetcore\ElsaDashboard.Samples.AspNetCore.SubPath\ElsaDashboard.Samples.AspNetCore.SubPath.csproj", "{BB715C0C-BE88-4F7F-A43F-1F8DFC9A1388}" + EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -751,6 +765,12 @@ Global {84751112-C2B7-41D4-98F5-D87D7C2E1DAE}.Debug|Any CPU.Build.0 = Debug|Any CPU {84751112-C2B7-41D4-98F5-D87D7C2E1DAE}.Release|Any CPU.ActiveCfg = Release|Any CPU {84751112-C2B7-41D4-98F5-D87D7C2E1DAE}.Release|Any CPU.Build.0 = Release|Any CPU + + {FE6FC5F9-349A-4A3A-B291-CE0614030D5C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FE6FC5F9-349A-4A3A-B291-CE0614030D5C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FE6FC5F9-349A-4A3A-B291-CE0614030D5C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FE6FC5F9-349A-4A3A-B291-CE0614030D5C}.Release|Any CPU.Build.0 = Release|Any CPU + {4D4022DD-244B-47EE-95FA-7071EC687B24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4D4022DD-244B-47EE-95FA-7071EC687B24}.Debug|Any CPU.Build.0 = Debug|Any CPU {4D4022DD-244B-47EE-95FA-7071EC687B24}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -763,6 +783,7 @@ Global {BB715C0C-BE88-4F7F-A43F-1F8DFC9A1388}.Debug|Any CPU.Build.0 = Debug|Any CPU {BB715C0C-BE88-4F7F-A43F-1F8DFC9A1388}.Release|Any CPU.ActiveCfg = Release|Any CPU {BB715C0C-BE88-4F7F-A43F-1F8DFC9A1388}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -903,10 +924,14 @@ Global {8E6215AB-FDD3-4011-B598-B6BB63F294BB} = {4673732F-2853-47BD-91B8-C95C229D2C89} {6A03B177-09E0-4421-9704-945E6248AB69} = {D86B94DC-A53C-4A67-A820-828DD359C49B} {84751112-C2B7-41D4-98F5-D87D7C2E1DAE} = {22E75696-6FE9-436A-9097-EE21C603F818} + + {FE6FC5F9-349A-4A3A-B291-CE0614030D5C} = {C865B0FD-E505-48F0-BFAF-0D4D7C1B5CA1} + {4D4022DD-244B-47EE-95FA-7071EC687B24} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180} {39DE1EE2-DF4F-44EB-9F5A-551BEADD6673} = {4673732F-2853-47BD-91B8-C95C229D2C89} {6E191628-927B-42FB-8805-D2977D8FC4E3} = {22E75696-6FE9-436A-9097-EE21C603F818} {BB715C0C-BE88-4F7F-A43F-1F8DFC9A1388} = {39DE1EE2-DF4F-44EB-9F5A-551BEADD6673} + EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {8B0975FD-7050-48B0-88C5-48C33378E158} diff --git a/src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/DbContextOptionsBuilderExtensions.cs b/src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/DbContextOptionsBuilderExtensions.cs new file mode 100644 index 000000000..4f8940986 --- /dev/null +++ b/src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/DbContextOptionsBuilderExtensions.cs @@ -0,0 +1,17 @@ +using Elsa.Persistence.EntityFramework.Core; +using Microsoft.EntityFrameworkCore; +using System; + +namespace Elsa.Persistence.EntityFramework.Oracle +{ + public static class DbContextOptionsBuilderExtensions + { + /// + /// Configures the context to use Oracle. + /// + public static DbContextOptionsBuilder UseOracle(this DbContextOptionsBuilder builder, string connectionString) => + builder.UseOracle(connectionString, db => db + .MigrationsAssembly(typeof(OracleElsaContextFactory).Assembly.GetName().Name) + .MigrationsHistoryTable(ElsaContext.MigrationsHistoryTable, ElsaContext.ElsaSchema)); + } +} diff --git a/src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/Elsa.Persistence.EntityFramework.Oracle.csproj b/src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/Elsa.Persistence.EntityFramework.Oracle.csproj new file mode 100644 index 000000000..13cf94450 --- /dev/null +++ b/src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/Elsa.Persistence.EntityFramework.Oracle.csproj @@ -0,0 +1,32 @@ + + + + + + + netcoreapp3.1;net5.0 + + Elsa is a set of workflow libraries and tools that enable lean and mean workflowing capabilities in any .NET Core application. + This package provides Entity Framework Core migrations for the Oracle database provider. + + elsa, workflows, efcore, oracle + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + diff --git a/src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/FodyWeavers.xml b/src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/FodyWeavers.xml new file mode 100644 index 000000000..00e1d9a1c --- /dev/null +++ b/src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/Migrations/20210707065825_Initial.Designer.cs b/src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/Migrations/20210707065825_Initial.Designer.cs new file mode 100644 index 000000000..ecb359851 --- /dev/null +++ b/src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/Migrations/20210707065825_Initial.Designer.cs @@ -0,0 +1,314 @@ +// +using System; +using Elsa.Persistence.EntityFramework.Core; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Oracle.EntityFrameworkCore.Metadata; + +namespace Elsa.Persistence.EntityFramework.Oracle.Migrations +{ + [DbContext(typeof(ElsaContext))] + [Migration("20210707065825_Initial")] + partial class Initial + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("ProductVersion", "5.0.6") + .HasAnnotation("Oracle:ValueGenerationStrategy", OracleValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("Elsa.Models.Bookmark", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CorrelationId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Model") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("ModelType") + .IsRequired() + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_Bookmark_ActivityId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_Bookmark_ActivityType"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("IX_Bookmark_CorrelationId"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_Bookmark_Hash"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Bookmark_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_Bookmark_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "TenantId", "Hash") + .HasDatabaseName("IX_Bookmark_ActivityType_TenantId_Hash"); + + b.HasIndex("Hash", "CorrelationId", "TenantId") + .HasDatabaseName("IX_Bookmark_Hash_CorrelationId_TenantId"); + + b.ToTable("Bookmarks"); + }); + + modelBuilder.Entity("Elsa.Models.WorkflowDefinition", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Data") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("DeleteCompletedInstances") + .HasColumnType("NUMBER(1)"); + + b.Property("Description") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("DisplayName") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("IsLatest") + .HasColumnType("NUMBER(1)"); + + b.Property("IsPublished") + .HasColumnType("NUMBER(1)"); + + b.Property("IsSingleton") + .HasColumnType("NUMBER(1)"); + + b.Property("Name") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("PersistenceBehavior") + .HasColumnType("NUMBER(10)"); + + b.Property("Tag") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + 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("Name") + .HasDatabaseName("IX_WorkflowDefinition_Name"); + + b.HasIndex("Tag") + .HasDatabaseName("IX_WorkflowDefinition_Tag"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowDefinition_TenantId"); + + b.HasIndex("Version") + .HasDatabaseName("IX_WorkflowDefinition_Version"); + + b.HasIndex("DefinitionId", "Version") + .IsUnique() + .HasDatabaseName("IX_WorkflowDefinition_DefinitionId_VersionId"); + + b.ToTable("WorkflowDefinitions"); + }); + + modelBuilder.Entity("Elsa.Models.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Data") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("EventName") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("Message") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("Source") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Timestamp") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_TenantId"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.ToTable("WorkflowExecutionLogRecords"); + }); + + modelBuilder.Entity("Elsa.Models.WorkflowInstance", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CancelledAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("ContextId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ContextType") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CorrelationId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CreatedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("Data") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("FaultedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("FinishedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("LastExecutedActivityId") + .HasColumnType("NVARCHAR2(2000)"); + + b.Property("LastExecutedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("Name") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Version") + .HasColumnType("NUMBER(10)"); + + b.Property("WorkflowStatus") + .HasColumnType("NUMBER(10)"); + + b.HasKey("Id"); + + b.HasIndex("ContextId") + .HasDatabaseName("IX_WorkflowInstance_ContextId"); + + b.HasIndex("ContextType") + .HasDatabaseName("IX_WorkflowInstance_ContextType"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("IX_WorkflowInstance_CorrelationId"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_WorkflowInstance_CreatedAt"); + + b.HasIndex("DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_DefinitionId"); + + b.HasIndex("FaultedAt") + .HasDatabaseName("IX_WorkflowInstance_FaultedAt"); + + b.HasIndex("FinishedAt") + .HasDatabaseName("IX_WorkflowInstance_FinishedAt"); + + b.HasIndex("LastExecutedAt") + .HasDatabaseName("IX_WorkflowInstance_LastExecutedAt"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowInstance_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowInstance_TenantId"); + + b.HasIndex("WorkflowStatus") + .HasDatabaseName("IX_WorkflowInstance_WorkflowStatus"); + + b.HasIndex("WorkflowStatus", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_WorkflowStatus_DefinitionId"); + + b.HasIndex("WorkflowStatus", "DefinitionId", "Version") + .HasDatabaseName("IX_WorkflowInstance_WorkflowStatus_DefinitionId_Version"); + + b.ToTable("WorkflowInstances"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/Migrations/20210707065825_Initial.cs b/src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/Migrations/20210707065825_Initial.cs new file mode 100644 index 000000000..2c0c52168 --- /dev/null +++ b/src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/Migrations/20210707065825_Initial.cs @@ -0,0 +1,325 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace Elsa.Persistence.EntityFramework.Oracle.Migrations +{ + public partial class Initial : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.EnsureSchema( + name: "Elsa"); + + migrationBuilder.CreateTable( + name: "Bookmarks", + schema: "Elsa", + columns: table => new + { + Id = table.Column(type: "NVARCHAR2(450)", nullable: false), + TenantId = table.Column(type: "NVARCHAR2(450)", nullable: true), + Hash = table.Column(type: "NVARCHAR2(450)", nullable: false), + Model = table.Column(type: "NCLOB", nullable: false), + ModelType = table.Column(type: "NCLOB", nullable: false), + ActivityType = table.Column(type: "NVARCHAR2(450)", nullable: false), + ActivityId = table.Column(type: "NVARCHAR2(450)", nullable: false), + WorkflowInstanceId = table.Column(type: "NVARCHAR2(450)", nullable: false), + CorrelationId = table.Column(type: "NVARCHAR2(450)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Bookmarks", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "WorkflowDefinitions", + schema: "Elsa", + columns: table => new + { + Id = table.Column(type: "NVARCHAR2(450)", nullable: false), + DefinitionId = table.Column(type: "NVARCHAR2(450)", nullable: false), + TenantId = table.Column(type: "NVARCHAR2(450)", nullable: true), + Name = table.Column(type: "NVARCHAR2(450)", nullable: true), + DisplayName = table.Column(type: "NCLOB", nullable: true), + Description = table.Column(type: "NCLOB", nullable: true), + Version = table.Column(type: "NUMBER(10)", nullable: false), + IsSingleton = table.Column(type: "NUMBER(1)", nullable: false), + PersistenceBehavior = table.Column(type: "NUMBER(10)", nullable: false), + DeleteCompletedInstances = table.Column(type: "NUMBER(1)", nullable: false), + IsPublished = table.Column(type: "NUMBER(1)", nullable: false), + IsLatest = table.Column(type: "NUMBER(1)", nullable: false), + Tag = table.Column(type: "NVARCHAR2(450)", nullable: true), + Data = table.Column(type: "NCLOB", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_WorkflowDefinitions", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "WorkflowExecutionLogRecords", + schema: "Elsa", + columns: table => new + { + Id = table.Column(type: "NVARCHAR2(450)", nullable: false), + TenantId = table.Column(type: "NVARCHAR2(450)", nullable: true), + WorkflowInstanceId = table.Column(type: "NVARCHAR2(450)", nullable: false), + ActivityId = table.Column(type: "NVARCHAR2(450)", nullable: false), + ActivityType = table.Column(type: "NVARCHAR2(450)", nullable: false), + Timestamp = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: false), + EventName = table.Column(type: "NCLOB", nullable: true), + Message = table.Column(type: "NCLOB", nullable: true), + Source = table.Column(type: "NCLOB", nullable: true), + Data = table.Column(type: "NCLOB", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_WorkflowExecutionLogRecords", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "WorkflowInstances", + schema: "Elsa", + columns: table => new + { + Id = table.Column(type: "NVARCHAR2(450)", nullable: false), + DefinitionId = table.Column(type: "NVARCHAR2(450)", nullable: false), + TenantId = table.Column(type: "NVARCHAR2(450)", nullable: true), + Version = table.Column(type: "NUMBER(10)", nullable: false), + WorkflowStatus = table.Column(type: "NUMBER(10)", nullable: false), + CorrelationId = table.Column(type: "NVARCHAR2(450)", nullable: false), + ContextType = table.Column(type: "NVARCHAR2(450)", nullable: true), + ContextId = table.Column(type: "NVARCHAR2(450)", nullable: true), + Name = table.Column(type: "NVARCHAR2(450)", nullable: true), + CreatedAt = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: false), + LastExecutedAt = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: true), + FinishedAt = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: true), + CancelledAt = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: true), + FaultedAt = table.Column(type: "TIMESTAMP(7) WITH TIME ZONE", nullable: true), + LastExecutedActivityId = table.Column(type: "NCLOB", nullable: true), + Data = table.Column(type: "NCLOB", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_WorkflowInstances", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_Bookmark_ActivityId", + schema: "Elsa", + table: "Bookmarks", + column: "ActivityId"); + + migrationBuilder.CreateIndex( + name: "IX_Bookmark_ActivityType", + schema: "Elsa", + table: "Bookmarks", + column: "ActivityType"); + + migrationBuilder.CreateIndex( + name: "IX_Bookmark_ActivityType_TenantId_Hash", + schema: "Elsa", + table: "Bookmarks", + columns: new[] { "ActivityType", "TenantId", "Hash" }); + + migrationBuilder.CreateIndex( + name: "IX_Bookmark_CorrelationId", + schema: "Elsa", + table: "Bookmarks", + column: "CorrelationId"); + + migrationBuilder.CreateIndex( + name: "IX_Bookmark_Hash", + schema: "Elsa", + table: "Bookmarks", + column: "Hash"); + + migrationBuilder.CreateIndex( + name: "IX_Bookmark_Hash_CorrelationId_TenantId", + schema: "Elsa", + table: "Bookmarks", + columns: new[] { "Hash", "CorrelationId", "TenantId" }); + + migrationBuilder.CreateIndex( + name: "IX_Bookmark_TenantId", + schema: "Elsa", + table: "Bookmarks", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_Bookmark_WorkflowInstanceId", + schema: "Elsa", + table: "Bookmarks", + column: "WorkflowInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_DefinitionId_VersionId", + schema: "Elsa", + table: "WorkflowDefinitions", + columns: new[] { "DefinitionId", "Version" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_IsLatest", + schema: "Elsa", + table: "WorkflowDefinitions", + column: "IsLatest"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_IsPublished", + schema: "Elsa", + table: "WorkflowDefinitions", + column: "IsPublished"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_Name", + schema: "Elsa", + table: "WorkflowDefinitions", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_Tag", + schema: "Elsa", + table: "WorkflowDefinitions", + column: "Tag"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_TenantId", + schema: "Elsa", + table: "WorkflowDefinitions", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowDefinition_Version", + schema: "Elsa", + table: "WorkflowDefinitions", + column: "Version"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityId", + schema: "Elsa", + table: "WorkflowExecutionLogRecords", + column: "ActivityId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_ActivityType", + schema: "Elsa", + table: "WorkflowExecutionLogRecords", + column: "ActivityType"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_TenantId", + schema: "Elsa", + table: "WorkflowExecutionLogRecords", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_Timestamp", + schema: "Elsa", + table: "WorkflowExecutionLogRecords", + column: "Timestamp"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowExecutionLogRecord_WorkflowInstanceId", + schema: "Elsa", + table: "WorkflowExecutionLogRecords", + column: "WorkflowInstanceId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_ContextId", + schema: "Elsa", + table: "WorkflowInstances", + column: "ContextId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_ContextType", + schema: "Elsa", + table: "WorkflowInstances", + column: "ContextType"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_CorrelationId", + schema: "Elsa", + table: "WorkflowInstances", + column: "CorrelationId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_CreatedAt", + schema: "Elsa", + table: "WorkflowInstances", + column: "CreatedAt"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_DefinitionId", + schema: "Elsa", + table: "WorkflowInstances", + column: "DefinitionId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_FaultedAt", + schema: "Elsa", + table: "WorkflowInstances", + column: "FaultedAt"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_FinishedAt", + schema: "Elsa", + table: "WorkflowInstances", + column: "FinishedAt"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_LastExecutedAt", + schema: "Elsa", + table: "WorkflowInstances", + column: "LastExecutedAt"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_Name", + schema: "Elsa", + table: "WorkflowInstances", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_TenantId", + schema: "Elsa", + table: "WorkflowInstances", + column: "TenantId"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_WorkflowStatus", + schema: "Elsa", + table: "WorkflowInstances", + column: "WorkflowStatus"); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_WorkflowStatus_DefinitionId", + schema: "Elsa", + table: "WorkflowInstances", + columns: new[] { "WorkflowStatus", "DefinitionId" }); + + migrationBuilder.CreateIndex( + name: "IX_WorkflowInstance_WorkflowStatus_DefinitionId_Version", + schema: "Elsa", + table: "WorkflowInstances", + columns: new[] { "WorkflowStatus", "DefinitionId", "Version" }); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Bookmarks", + schema: "Elsa"); + + migrationBuilder.DropTable( + name: "WorkflowDefinitions", + schema: "Elsa"); + + migrationBuilder.DropTable( + name: "WorkflowExecutionLogRecords", + schema: "Elsa"); + + migrationBuilder.DropTable( + name: "WorkflowInstances", + schema: "Elsa"); + } + } +} diff --git a/src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/Migrations/ElsaContextModelSnapshot.cs b/src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/Migrations/ElsaContextModelSnapshot.cs new file mode 100644 index 000000000..70059df7d --- /dev/null +++ b/src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/Migrations/ElsaContextModelSnapshot.cs @@ -0,0 +1,312 @@ +// +using System; +using Elsa.Persistence.EntityFramework.Core; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Oracle.EntityFrameworkCore.Metadata; + +namespace Elsa.Persistence.EntityFramework.Oracle.Migrations +{ + [DbContext(typeof(ElsaContext))] + partial class ElsaContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("Elsa") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("ProductVersion", "5.0.6") + .HasAnnotation("Oracle:ValueGenerationStrategy", OracleValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("Elsa.Models.Bookmark", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CorrelationId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Model") + .IsRequired() + .HasColumnType("NCLOB"); + + b.Property("ModelType") + .IsRequired() + .HasColumnType("NCLOB"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_Bookmark_ActivityId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_Bookmark_ActivityType"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("IX_Bookmark_CorrelationId"); + + b.HasIndex("Hash") + .HasDatabaseName("IX_Bookmark_Hash"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_Bookmark_TenantId"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_Bookmark_WorkflowInstanceId"); + + b.HasIndex("ActivityType", "TenantId", "Hash") + .HasDatabaseName("IX_Bookmark_ActivityType_TenantId_Hash"); + + b.HasIndex("Hash", "CorrelationId", "TenantId") + .HasDatabaseName("IX_Bookmark_Hash_CorrelationId_TenantId"); + + b.ToTable("Bookmarks"); + }); + + modelBuilder.Entity("Elsa.Models.WorkflowDefinition", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Data") + .HasColumnType("NCLOB"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("DeleteCompletedInstances") + .HasColumnType("NUMBER(1)"); + + b.Property("Description") + .HasColumnType("NCLOB"); + + b.Property("DisplayName") + .HasColumnType("NCLOB"); + + b.Property("IsLatest") + .HasColumnType("NUMBER(1)"); + + b.Property("IsPublished") + .HasColumnType("NUMBER(1)"); + + b.Property("IsSingleton") + .HasColumnType("NUMBER(1)"); + + b.Property("Name") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("PersistenceBehavior") + .HasColumnType("NUMBER(10)"); + + b.Property("Tag") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + 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("Name") + .HasDatabaseName("IX_WorkflowDefinition_Name"); + + b.HasIndex("Tag") + .HasDatabaseName("IX_WorkflowDefinition_Tag"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowDefinition_TenantId"); + + b.HasIndex("Version") + .HasDatabaseName("IX_WorkflowDefinition_Version"); + + b.HasIndex("DefinitionId", "Version") + .IsUnique() + .HasDatabaseName("IX_WorkflowDefinition_DefinitionId_VersionId"); + + b.ToTable("WorkflowDefinitions"); + }); + + modelBuilder.Entity("Elsa.Models.WorkflowExecutionLogRecord", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ActivityType") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Data") + .HasColumnType("NCLOB"); + + b.Property("EventName") + .HasColumnType("NCLOB)"); + + b.Property("Message") + .HasColumnType("NCLOB"); + + b.Property("Source") + .HasColumnType("NCLOB"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Timestamp") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("WorkflowInstanceId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityId"); + + b.HasIndex("ActivityType") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_ActivityType"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_TenantId"); + + b.HasIndex("Timestamp") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_Timestamp"); + + b.HasIndex("WorkflowInstanceId") + .HasDatabaseName("IX_WorkflowExecutionLogRecord_WorkflowInstanceId"); + + b.ToTable("WorkflowExecutionLogRecords"); + }); + + modelBuilder.Entity("Elsa.Models.WorkflowInstance", b => + { + b.Property("Id") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CancelledAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("ContextId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("ContextType") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CorrelationId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("CreatedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("Data") + .HasColumnType("NCLOB"); + + b.Property("DefinitionId") + .IsRequired() + .HasColumnType("NVARCHAR2(450)"); + + b.Property("FaultedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("FinishedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("LastExecutedActivityId") + .HasColumnType("NCLOB"); + + b.Property("LastExecutedAt") + .HasColumnType("TIMESTAMP(7) WITH TIME ZONE"); + + b.Property("Name") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("TenantId") + .HasColumnType("NVARCHAR2(450)"); + + b.Property("Version") + .HasColumnType("NUMBER(10)"); + + b.Property("WorkflowStatus") + .HasColumnType("NUMBER(10)"); + + b.HasKey("Id"); + + b.HasIndex("ContextId") + .HasDatabaseName("IX_WorkflowInstance_ContextId"); + + b.HasIndex("ContextType") + .HasDatabaseName("IX_WorkflowInstance_ContextType"); + + b.HasIndex("CorrelationId") + .HasDatabaseName("IX_WorkflowInstance_CorrelationId"); + + b.HasIndex("CreatedAt") + .HasDatabaseName("IX_WorkflowInstance_CreatedAt"); + + b.HasIndex("DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_DefinitionId"); + + b.HasIndex("FaultedAt") + .HasDatabaseName("IX_WorkflowInstance_FaultedAt"); + + b.HasIndex("FinishedAt") + .HasDatabaseName("IX_WorkflowInstance_FinishedAt"); + + b.HasIndex("LastExecutedAt") + .HasDatabaseName("IX_WorkflowInstance_LastExecutedAt"); + + b.HasIndex("Name") + .HasDatabaseName("IX_WorkflowInstance_Name"); + + b.HasIndex("TenantId") + .HasDatabaseName("IX_WorkflowInstance_TenantId"); + + b.HasIndex("WorkflowStatus") + .HasDatabaseName("IX_WorkflowInstance_WorkflowStatus"); + + b.HasIndex("WorkflowStatus", "DefinitionId") + .HasDatabaseName("IX_WorkflowInstance_WorkflowStatus_DefinitionId"); + + b.HasIndex("WorkflowStatus", "DefinitionId", "Version") + .HasDatabaseName("IX_WorkflowInstance_WorkflowStatus_DefinitionId_Version"); + + b.ToTable("WorkflowInstances"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/OracleElsaContextFactory.cs b/src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/OracleElsaContextFactory.cs new file mode 100644 index 000000000..8b27dfa11 --- /dev/null +++ b/src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/OracleElsaContextFactory.cs @@ -0,0 +1,26 @@ +using Elsa.Persistence.EntityFramework.Core; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Design; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Elsa.Persistence.EntityFramework.Oracle +{ + public class OracleElsaContextFactory: IDesignTimeDbContextFactory + { + public ElsaContext CreateDbContext(string[] args) + { + var builder = new DbContextOptionsBuilder(); + var connectionString = args.Any() ? args[0] : "Server=127.0.0.1;Port=5432;Database=elsa;User Id=oracle;Password=password;"; + + builder.UseOracle( + connectionString, + db => db.MigrationsAssembly(typeof(OracleElsaContextFactory).Assembly.GetName().Name) + .MigrationsHistoryTable(ElsaContext.MigrationsHistoryTable, ElsaContext.ElsaSchema)); + + return new ElsaContext(builder.Options); + } + } +} diff --git a/src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/Readme.md b/src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/Readme.md new file mode 100644 index 000000000..4ac615936 --- /dev/null +++ b/src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.Oracle/Readme.md @@ -0,0 +1,14 @@ +### Entity Framework Core Commands + +**Generate Migrations** + +``` +dotnet ef migrations add Initial -- "{connection string}" + +``` + +etc.. + +**Apply Migrations** + +`dotnet ef database update -- "{connection string}"` \ No newline at end of file