Fix for oracle persistence provider (#2450)

* Add support of Oracle NCLOB columns

in order to use data more than 2000 char we have to use NCLOB ,in oracle we have to explicitly say the column is NCLOB otherwise it would be considered Nvarchar(2000)

* remove unnecessary package source
This commit is contained in:
Akbar Ghasemi Tazehabadi 2021-11-10 16:20:33 +01:00 committed by GitHub
parent a20b728cb0
commit 3d0c3eadbd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 539 additions and 14 deletions

View file

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear/>
<clear />
<add key="NuGet" value="https://api.nuget.org/v3/index.json" />
<add key="Jint MyGet" value="https://www.myget.org/F/jint/api/v3/index.json" />
</packageSources>

View file

@ -23,5 +23,6 @@ namespace Elsa.Persistence.EntityFramework.Core.Configuration
builder.HasIndex(x => x.IsPublished).HasDatabaseName($"IX_{nameof(WorkflowDefinition)}_{nameof(WorkflowDefinition.IsPublished)}");
builder.HasIndex(x => x.Tag).HasDatabaseName($"IX_{nameof(WorkflowDefinition)}_{nameof(WorkflowDefinition.Tag)}");
}
}
}

View file

@ -1,6 +1,7 @@
using System.Linq;
using System.Linq;
using Elsa.Models;
using Elsa.Persistence.EntityFramework.Core.Configuration;
using Elsa.Persistence.EntityFramework.Core.Extensions;
using Microsoft.EntityFrameworkCore;
using NodaTime;
@ -44,6 +45,52 @@ namespace Elsa.Persistence.EntityFramework.Core
}
}
}
if (Database.IsOracle())
{
//in order to use data more than 2000 char we have to use NCLOB ,in oracle we have to explicitly say the column is NCLOB otherwise it would be considered Nvarchar(2000)
modelBuilder.Entity<WorkflowInstance>().Property(x => x.LastExecutedActivityId)
.HasColumnType("NCLOB");
modelBuilder.Entity<WorkflowInstance>().Property("Data")
.HasColumnType("NCLOB");
modelBuilder.Entity<WorkflowExecutionLogRecord>().Property(x => x.Source)
.HasColumnType("NCLOB");
modelBuilder.Entity<WorkflowExecutionLogRecord>().Property(x => x.Message)
.HasColumnType("NCLOB");
modelBuilder.Entity<WorkflowExecutionLogRecord>().Property(x => x.EventName)
.HasColumnType("NCLOB");
modelBuilder.Entity<WorkflowExecutionLogRecord>().Property(x => x.Data)
.HasColumnType("NCLOB");
modelBuilder.Entity<WorkflowDefinition>().Property(x => x.DisplayName)
.HasColumnType("NCLOB");
modelBuilder.Entity<WorkflowDefinition>().Property(x => x.Description)
.HasColumnType("NCLOB");
modelBuilder.Entity<WorkflowDefinition>().Property("Data")
.HasColumnType("NCLOB");
modelBuilder.Entity<Bookmark>().Property(x => x.Model)
.HasColumnType("NCLOB");
modelBuilder.Entity<Bookmark>().Property(x => x.ModelType)
.HasColumnType("NCLOB");
}
}
}
}

View file

@ -0,0 +1,315 @@
// <auto-generated />
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("20211104093625_Update24")]
partial class Update24
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasDefaultSchema("Elsa")
.HasAnnotation("Relational:MaxIdentifierLength", 128)
.HasAnnotation("ProductVersion", "5.0.10")
.HasAnnotation("Oracle:ValueGenerationStrategy", OracleValueGenerationStrategy.IdentityColumn);
modelBuilder.Entity("Elsa.Models.Bookmark", b =>
{
b.Property<string>("Id")
.HasColumnType("NVARCHAR2(450)");
b.Property<string>("ActivityId")
.IsRequired()
.HasColumnType("NVARCHAR2(450)");
b.Property<string>("ActivityType")
.IsRequired()
.HasColumnType("NVARCHAR2(450)");
b.Property<string>("CorrelationId")
.IsRequired()
.HasColumnType("NVARCHAR2(450)");
b.Property<string>("Hash")
.IsRequired()
.HasColumnType("NVARCHAR2(450)");
b.Property<string>("Model")
.IsRequired()
.HasColumnType("NCLOB");
b.Property<string>("ModelType")
.IsRequired()
.HasColumnType("NCLOB");
b.Property<string>("TenantId")
.HasColumnType("NVARCHAR2(450)");
b.Property<string>("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<string>("Id")
.HasColumnType("NVARCHAR2(450)");
b.Property<string>("Data")
.HasColumnType("NCLOB");
b.Property<string>("DefinitionId")
.IsRequired()
.HasColumnType("NVARCHAR2(450)");
b.Property<bool>("DeleteCompletedInstances")
.HasColumnType("NUMBER(1)");
b.Property<string>("Description")
.HasColumnType("NCLOB");
b.Property<string>("DisplayName")
.HasColumnType("NCLOB");
b.Property<bool>("IsLatest")
.HasColumnType("NUMBER(1)");
b.Property<bool>("IsPublished")
.HasColumnType("NUMBER(1)");
b.Property<bool>("IsSingleton")
.HasColumnType("NUMBER(1)");
b.Property<string>("Name")
.HasColumnType("NVARCHAR2(450)");
b.Property<int>("PersistenceBehavior")
.HasColumnType("NUMBER(10)");
b.Property<string>("Tag")
.HasColumnType("NVARCHAR2(450)");
b.Property<string>("TenantId")
.HasColumnType("NVARCHAR2(450)");
b.Property<int>("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<string>("Id")
.HasColumnType("NVARCHAR2(450)");
b.Property<string>("ActivityId")
.IsRequired()
.HasColumnType("NVARCHAR2(450)");
b.Property<string>("ActivityType")
.IsRequired()
.HasColumnType("NVARCHAR2(450)");
b.Property<string>("Data")
.HasColumnType("NCLOB");
b.Property<string>("EventName")
.HasColumnType("NCLOB");
b.Property<string>("Message")
.HasColumnType("NCLOB");
b.Property<string>("Source")
.HasColumnType("NCLOB");
b.Property<string>("TenantId")
.HasColumnType("NVARCHAR2(450)");
b.Property<DateTimeOffset>("Timestamp")
.HasColumnType("TIMESTAMP(7) WITH TIME ZONE");
b.Property<string>("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<string>("Id")
.HasColumnType("NVARCHAR2(450)");
b.Property<DateTimeOffset?>("CancelledAt")
.HasColumnType("TIMESTAMP(7) WITH TIME ZONE");
b.Property<string>("ContextId")
.HasColumnType("NVARCHAR2(450)");
b.Property<string>("ContextType")
.HasColumnType("NVARCHAR2(450)");
b.Property<string>("CorrelationId")
.IsRequired()
.HasColumnType("NVARCHAR2(450)");
b.Property<DateTimeOffset>("CreatedAt")
.HasColumnType("TIMESTAMP(7) WITH TIME ZONE");
b.Property<string>("Data")
.HasColumnType("NCLOB");
b.Property<string>("DefinitionId")
.IsRequired()
.HasColumnType("NVARCHAR2(450)");
b.Property<DateTimeOffset?>("FaultedAt")
.HasColumnType("TIMESTAMP(7) WITH TIME ZONE");
b.Property<DateTimeOffset?>("FinishedAt")
.HasColumnType("TIMESTAMP(7) WITH TIME ZONE");
b.Property<string>("LastExecutedActivityId")
.HasColumnType("NCLOB");
b.Property<DateTimeOffset?>("LastExecutedAt")
.HasColumnType("TIMESTAMP(7) WITH TIME ZONE");
b.Property<string>("Name")
.HasColumnType("NVARCHAR2(450)");
b.Property<string>("TenantId")
.HasColumnType("NVARCHAR2(450)");
b.Property<int>("Version")
.HasColumnType("NUMBER(10)");
b.Property<int>("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
}
}
}

View file

@ -0,0 +1,161 @@
using Microsoft.EntityFrameworkCore.Migrations;
namespace Elsa.Persistence.EntityFramework.Oracle.Migrations
{
public partial class Update24 : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "Output",
schema: "Elsa",
table: "WorkflowInstances");
migrationBuilder.AlterColumn<string>(
name: "LastExecutedActivityId",
schema: "Elsa",
table: "WorkflowInstances",
type: "NCLOB",
nullable: true,
oldClrType: typeof(string),
oldType: "NVARCHAR2(2000)",
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "Data",
schema: "Elsa",
table: "WorkflowInstances",
type: "NCLOB",
nullable: true,
oldClrType: typeof(string),
oldType: "NVARCHAR2(2000)",
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "EventName",
schema: "Elsa",
table: "WorkflowExecutionLogRecords",
type: "NCLOB",
nullable: true,
oldClrType: typeof(string),
oldType: "NVARCHAR2(2000)",
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "DisplayName",
schema: "Elsa",
table: "WorkflowDefinitions",
type: "NCLOB",
nullable: true,
oldClrType: typeof(string),
oldType: "NVARCHAR2(2000)",
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "Description",
schema: "Elsa",
table: "WorkflowDefinitions",
type: "NCLOB",
nullable: true,
oldClrType: typeof(string),
oldType: "NVARCHAR2(2000)",
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "ModelType",
schema: "Elsa",
table: "Bookmarks",
type: "NCLOB",
nullable: false,
oldClrType: typeof(string),
oldType: "NVARCHAR2(2000)");
migrationBuilder.AlterColumn<string>(
name: "Model",
schema: "Elsa",
table: "Bookmarks",
type: "NCLOB",
nullable: false,
oldClrType: typeof(string),
oldType: "NVARCHAR2(2000)");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<string>(
name: "LastExecutedActivityId",
schema: "Elsa",
table: "WorkflowInstances",
type: "NVARCHAR2(2000)",
nullable: true,
oldClrType: typeof(string),
oldType: "NCLOB",
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "Data",
schema: "Elsa",
table: "WorkflowInstances",
type: "NVARCHAR2(2000)",
nullable: true,
oldClrType: typeof(string),
oldType: "NCLOB",
oldNullable: true);
migrationBuilder.AddColumn<string>(
name: "Output",
schema: "Elsa",
table: "WorkflowInstances",
type: "NCLOB",
nullable: true);
migrationBuilder.AlterColumn<string>(
name: "EventName",
schema: "Elsa",
table: "WorkflowExecutionLogRecords",
type: "NVARCHAR2(2000)",
nullable: true,
oldClrType: typeof(string),
oldType: "NCLOB",
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "DisplayName",
schema: "Elsa",
table: "WorkflowDefinitions",
type: "NVARCHAR2(2000)",
nullable: true,
oldClrType: typeof(string),
oldType: "NCLOB",
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "Description",
schema: "Elsa",
table: "WorkflowDefinitions",
type: "NVARCHAR2(2000)",
nullable: true,
oldClrType: typeof(string),
oldType: "NCLOB",
oldNullable: true);
migrationBuilder.AlterColumn<string>(
name: "ModelType",
schema: "Elsa",
table: "Bookmarks",
type: "NVARCHAR2(2000)",
nullable: false,
oldClrType: typeof(string),
oldType: "NCLOB");
migrationBuilder.AlterColumn<string>(
name: "Model",
schema: "Elsa",
table: "Bookmarks",
type: "NVARCHAR2(2000)",
nullable: false,
oldClrType: typeof(string),
oldType: "NCLOB");
}
}
}

View file

@ -34,6 +34,7 @@ namespace Elsa.Persistence.EntityFramework.Oracle.Migrations
.HasColumnType("NVARCHAR2(450)");
b.Property<string>("CorrelationId")
.IsRequired()
.HasColumnType("NVARCHAR2(450)");
b.Property<string>("Hash")
@ -42,11 +43,11 @@ namespace Elsa.Persistence.EntityFramework.Oracle.Migrations
b.Property<string>("Model")
.IsRequired()
.HasColumnType("NVARCHAR2(2000)");
.HasColumnType("NCLOB");
b.Property<string>("ModelType")
.IsRequired()
.HasColumnType("NVARCHAR2(2000)");
.HasColumnType("NCLOB");
b.Property<string>("TenantId")
.HasColumnType("NVARCHAR2(450)");
@ -90,7 +91,7 @@ namespace Elsa.Persistence.EntityFramework.Oracle.Migrations
.HasColumnType("NVARCHAR2(450)");
b.Property<string>("Data")
.HasColumnType("NVARCHAR2(2000)");
.HasColumnType("NCLOB");
b.Property<string>("DefinitionId")
.IsRequired()
@ -100,10 +101,10 @@ namespace Elsa.Persistence.EntityFramework.Oracle.Migrations
.HasColumnType("NUMBER(1)");
b.Property<string>("Description")
.HasColumnType("NVARCHAR2(2000)");
.HasColumnType("NCLOB");
b.Property<string>("DisplayName")
.HasColumnType("NVARCHAR2(2000)");
.HasColumnType("NCLOB");
b.Property<bool>("IsLatest")
.HasColumnType("NUMBER(1)");
@ -170,16 +171,16 @@ namespace Elsa.Persistence.EntityFramework.Oracle.Migrations
.HasColumnType("NVARCHAR2(450)");
b.Property<string>("Data")
.HasColumnType("NVARCHAR2(2000)");
.HasColumnType("NCLOB");
b.Property<string>("EventName")
.HasColumnType("NVARCHAR2(2000)");
.HasColumnType("NCLOB");
b.Property<string>("Message")
.HasColumnType("NVARCHAR2(2000)");
.HasColumnType("NCLOB");
b.Property<string>("Source")
.HasColumnType("NVARCHAR2(2000)");
.HasColumnType("NCLOB");
b.Property<string>("TenantId")
.HasColumnType("NVARCHAR2(450)");
@ -233,7 +234,7 @@ namespace Elsa.Persistence.EntityFramework.Oracle.Migrations
.HasColumnType("TIMESTAMP(7) WITH TIME ZONE");
b.Property<string>("Data")
.HasColumnType("NVARCHAR2(2000)");
.HasColumnType("NCLOB");
b.Property<string>("DefinitionId")
.IsRequired()
@ -246,7 +247,7 @@ namespace Elsa.Persistence.EntityFramework.Oracle.Migrations
.HasColumnType("TIMESTAMP(7) WITH TIME ZONE");
b.Property<string>("LastExecutedActivityId")
.HasColumnType("NVARCHAR2(2000)");
.HasColumnType("NCLOB");
b.Property<DateTimeOffset?>("LastExecutedAt")
.HasColumnType("TIMESTAMP(7) WITH TIME ZONE");