Add MySql EntityFramework Provider

This commit is contained in:
Erol Keskin 2021-04-24 01:28:20 +03:00 committed by Sipke Schoorstra
parent 57c8fc6bcd
commit 8f429a5cc1
10 changed files with 955 additions and 0 deletions

View file

@ -0,0 +1,16 @@
using Microsoft.EntityFrameworkCore;
namespace Elsa.Persistence.EntityFramework.MySql
{
public static class DbContextOptionsBuilderExtensions
{
/// <summary>
/// Configures the context to use MySql
/// </summary>
/// <param name="builder"></param>
/// <param name="connectionString"></param>
/// <returns></returns>
public static DbContextOptionsBuilder UseMySql(this DbContextOptionsBuilder builder, string connectionString) =>
builder.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString), db => db.MigrationsAssembly(typeof(MySqlElsaContextFactory).Assembly.GetName().Name));
}
}

View file

@ -0,0 +1,28 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\..\common.props" />
<Import Project="..\..\..\..\configureawait.props" />
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<Description>
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 MySql database provider.
</Description>
<PackageTags>elsa, workflows, efcore, mysql, mariadb</PackageTags>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Elsa.Persistence.EntityFramework.Core\Elsa.Persistence.EntityFramework.Core.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.5">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="5.0.0-beta.1" />
</ItemGroup>
</Project>

View file

@ -0,0 +1,3 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
<ConfigureAwait />
</Weavers>

View file

@ -0,0 +1,288 @@
// <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;
namespace Elsa.Persistence.EntityFramework.MySql.Migrations
{
[DbContext(typeof(ElsaContext))]
[Migration("20210423213120_InitialContext")]
partial class InitialContext
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("Relational:MaxIdentifierLength", 64)
.HasAnnotation("ProductVersion", "5.0.5");
modelBuilder.Entity("Elsa.Models.Bookmark", b =>
{
b.Property<string>("Id")
.HasColumnType("varchar(255)");
b.Property<string>("ActivityId")
.IsRequired()
.HasColumnType("varchar(255)");
b.Property<string>("ActivityType")
.IsRequired()
.HasColumnType("varchar(255)");
b.Property<string>("Hash")
.IsRequired()
.HasColumnType("varchar(255)");
b.Property<string>("Model")
.IsRequired()
.HasColumnType("longtext");
b.Property<string>("ModelType")
.IsRequired()
.HasColumnType("longtext");
b.Property<string>("TenantId")
.HasColumnType("varchar(255)");
b.Property<string>("WorkflowInstanceId")
.IsRequired()
.HasColumnType("varchar(255)");
b.HasKey("Id");
b.HasIndex("ActivityId")
.HasDatabaseName("IX_Bookmark_ActivityId");
b.HasIndex("ActivityType")
.HasDatabaseName("IX_Bookmark_ActivityType");
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.ToTable("Bookmarks");
});
modelBuilder.Entity("Elsa.Models.WorkflowDefinition", b =>
{
b.Property<string>("Id")
.HasColumnType("varchar(255)");
b.Property<string>("Data")
.HasColumnType("longtext");
b.Property<string>("DefinitionId")
.IsRequired()
.HasColumnType("varchar(255)");
b.Property<bool>("DeleteCompletedInstances")
.HasColumnType("tinyint(1)");
b.Property<string>("Description")
.HasColumnType("longtext");
b.Property<string>("DisplayName")
.HasColumnType("longtext");
b.Property<bool>("IsLatest")
.HasColumnType("tinyint(1)");
b.Property<bool>("IsPublished")
.HasColumnType("tinyint(1)");
b.Property<bool>("IsSingleton")
.HasColumnType("tinyint(1)");
b.Property<string>("Name")
.HasColumnType("varchar(255)");
b.Property<int>("PersistenceBehavior")
.HasColumnType("int");
b.Property<string>("TenantId")
.HasColumnType("varchar(255)");
b.Property<int>("Version")
.HasColumnType("int");
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("TenantId")
.HasDatabaseName("IX_WorkflowDefinition_TenantId");
b.HasIndex("Version")
.HasDatabaseName("IX_WorkflowDefinition_Version");
b.HasIndex("DefinitionId", "Version")
.HasDatabaseName("IX_WorkflowDefinition_DefinitionId_VersionId");
b.ToTable("WorkflowDefinitions");
});
modelBuilder.Entity("Elsa.Models.WorkflowExecutionLogRecord", b =>
{
b.Property<string>("Id")
.HasColumnType("varchar(255)");
b.Property<string>("ActivityId")
.IsRequired()
.HasColumnType("varchar(255)");
b.Property<string>("ActivityType")
.IsRequired()
.HasColumnType("varchar(255)");
b.Property<string>("Data")
.HasColumnType("longtext");
b.Property<string>("EventName")
.HasColumnType("longtext");
b.Property<string>("Message")
.HasColumnType("longtext");
b.Property<string>("Source")
.HasColumnType("longtext");
b.Property<string>("TenantId")
.HasColumnType("varchar(255)");
b.Property<DateTimeOffset>("Timestamp")
.HasColumnType("datetime(6)");
b.Property<string>("WorkflowInstanceId")
.IsRequired()
.HasColumnType("varchar(255)");
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("varchar(255)");
b.Property<DateTimeOffset?>("CancelledAt")
.HasColumnType("datetime(6)");
b.Property<string>("ContextId")
.HasColumnType("varchar(255)");
b.Property<string>("ContextType")
.HasColumnType("varchar(255)");
b.Property<string>("CorrelationId")
.HasColumnType("varchar(255)");
b.Property<DateTimeOffset>("CreatedAt")
.HasColumnType("datetime(6)");
b.Property<string>("Data")
.HasColumnType("longtext");
b.Property<string>("DefinitionId")
.IsRequired()
.HasColumnType("varchar(255)");
b.Property<DateTimeOffset?>("FaultedAt")
.HasColumnType("datetime(6)");
b.Property<DateTimeOffset?>("FinishedAt")
.HasColumnType("datetime(6)");
b.Property<DateTimeOffset?>("LastExecutedAt")
.HasColumnType("datetime(6)");
b.Property<string>("Name")
.HasColumnType("varchar(255)");
b.Property<string>("TenantId")
.HasColumnType("varchar(255)");
b.Property<int>("Version")
.HasColumnType("int");
b.Property<int>("WorkflowStatus")
.HasColumnType("int");
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", "Version")
.HasDatabaseName("IX_WorkflowInstance_WorkflowStatus_DefinitionId_Version");
b.ToTable("WorkflowInstances");
});
#pragma warning restore 612, 618
}
}
}

View file

@ -0,0 +1,260 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
namespace Elsa.Persistence.EntityFramework.MySql.Migrations
{
public partial class InitialContext : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterDatabase()
.Annotation("MySql:CharSet", "utf8mb4");
migrationBuilder.CreateTable(
name: "Bookmarks",
columns: table => new
{
Id = table.Column<string>(type: "varchar(255)", nullable: false),
TenantId = table.Column<string>(type: "varchar(255)", nullable: true),
Hash = table.Column<string>(type: "varchar(255)", nullable: false),
Model = table.Column<string>(type: "longtext", nullable: false),
ModelType = table.Column<string>(type: "longtext", nullable: false),
ActivityType = table.Column<string>(type: "varchar(255)", nullable: false),
ActivityId = table.Column<string>(type: "varchar(255)", nullable: false),
WorkflowInstanceId = table.Column<string>(type: "varchar(255)", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Bookmarks", x => x.Id);
});
migrationBuilder.CreateTable(
name: "WorkflowDefinitions",
columns: table => new
{
Id = table.Column<string>(type: "varchar(255)", nullable: false),
DefinitionId = table.Column<string>(type: "varchar(255)", nullable: false),
TenantId = table.Column<string>(type: "varchar(255)", nullable: true),
Name = table.Column<string>(type: "varchar(255)", nullable: true),
DisplayName = table.Column<string>(type: "longtext", nullable: true),
Description = table.Column<string>(type: "longtext", nullable: true),
Version = table.Column<int>(type: "int", nullable: false),
IsSingleton = table.Column<bool>(type: "tinyint(1)", nullable: false),
PersistenceBehavior = table.Column<int>(type: "int", nullable: false),
DeleteCompletedInstances = table.Column<bool>(type: "tinyint(1)", nullable: false),
IsPublished = table.Column<bool>(type: "tinyint(1)", nullable: false),
IsLatest = table.Column<bool>(type: "tinyint(1)", nullable: false),
Data = table.Column<string>(type: "longtext", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_WorkflowDefinitions", x => x.Id);
});
migrationBuilder.CreateTable(
name: "WorkflowExecutionLogRecords",
columns: table => new
{
Id = table.Column<string>(type: "varchar(255)", nullable: false),
TenantId = table.Column<string>(type: "varchar(255)", nullable: true),
WorkflowInstanceId = table.Column<string>(type: "varchar(255)", nullable: false),
ActivityId = table.Column<string>(type: "varchar(255)", nullable: false),
ActivityType = table.Column<string>(type: "varchar(255)", nullable: false),
Timestamp = table.Column<DateTimeOffset>(type: "datetime(6)", nullable: false),
EventName = table.Column<string>(type: "longtext", nullable: true),
Message = table.Column<string>(type: "longtext", nullable: true),
Source = table.Column<string>(type: "longtext", nullable: true),
Data = table.Column<string>(type: "longtext", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_WorkflowExecutionLogRecords", x => x.Id);
});
migrationBuilder.CreateTable(
name: "WorkflowInstances",
columns: table => new
{
Id = table.Column<string>(type: "varchar(255)", nullable: false),
DefinitionId = table.Column<string>(type: "varchar(255)", nullable: false),
TenantId = table.Column<string>(type: "varchar(255)", nullable: true),
Version = table.Column<int>(type: "int", nullable: false),
WorkflowStatus = table.Column<int>(type: "int", nullable: false),
CorrelationId = table.Column<string>(type: "varchar(255)", nullable: true),
ContextType = table.Column<string>(type: "varchar(255)", nullable: true),
ContextId = table.Column<string>(type: "varchar(255)", nullable: true),
Name = table.Column<string>(type: "varchar(255)", nullable: true),
CreatedAt = table.Column<DateTimeOffset>(type: "datetime(6)", nullable: false),
LastExecutedAt = table.Column<DateTimeOffset>(type: "datetime(6)", nullable: true),
FinishedAt = table.Column<DateTimeOffset>(type: "datetime(6)", nullable: true),
CancelledAt = table.Column<DateTimeOffset>(type: "datetime(6)", nullable: true),
FaultedAt = table.Column<DateTimeOffset>(type: "datetime(6)", nullable: true),
Data = table.Column<string>(type: "longtext", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_WorkflowInstances", x => x.Id);
});
migrationBuilder.CreateIndex(
name: "IX_Bookmark_ActivityId",
table: "Bookmarks",
column: "ActivityId");
migrationBuilder.CreateIndex(
name: "IX_Bookmark_ActivityType",
table: "Bookmarks",
column: "ActivityType");
migrationBuilder.CreateIndex(
name: "IX_Bookmark_ActivityType_TenantId_Hash",
table: "Bookmarks",
columns: new[] { "ActivityType", "TenantId", "Hash" });
migrationBuilder.CreateIndex(
name: "IX_Bookmark_Hash",
table: "Bookmarks",
column: "Hash");
migrationBuilder.CreateIndex(
name: "IX_Bookmark_TenantId",
table: "Bookmarks",
column: "TenantId");
migrationBuilder.CreateIndex(
name: "IX_Bookmark_WorkflowInstanceId",
table: "Bookmarks",
column: "WorkflowInstanceId");
migrationBuilder.CreateIndex(
name: "IX_WorkflowDefinition_DefinitionId_VersionId",
table: "WorkflowDefinitions",
columns: new[] { "DefinitionId", "Version" });
migrationBuilder.CreateIndex(
name: "IX_WorkflowDefinition_IsLatest",
table: "WorkflowDefinitions",
column: "IsLatest");
migrationBuilder.CreateIndex(
name: "IX_WorkflowDefinition_IsPublished",
table: "WorkflowDefinitions",
column: "IsPublished");
migrationBuilder.CreateIndex(
name: "IX_WorkflowDefinition_Name",
table: "WorkflowDefinitions",
column: "Name");
migrationBuilder.CreateIndex(
name: "IX_WorkflowDefinition_TenantId",
table: "WorkflowDefinitions",
column: "TenantId");
migrationBuilder.CreateIndex(
name: "IX_WorkflowDefinition_Version",
table: "WorkflowDefinitions",
column: "Version");
migrationBuilder.CreateIndex(
name: "IX_WorkflowExecutionLogRecord_ActivityId",
table: "WorkflowExecutionLogRecords",
column: "ActivityId");
migrationBuilder.CreateIndex(
name: "IX_WorkflowExecutionLogRecord_ActivityType",
table: "WorkflowExecutionLogRecords",
column: "ActivityType");
migrationBuilder.CreateIndex(
name: "IX_WorkflowExecutionLogRecord_TenantId",
table: "WorkflowExecutionLogRecords",
column: "TenantId");
migrationBuilder.CreateIndex(
name: "IX_WorkflowExecutionLogRecord_Timestamp",
table: "WorkflowExecutionLogRecords",
column: "Timestamp");
migrationBuilder.CreateIndex(
name: "IX_WorkflowExecutionLogRecord_WorkflowInstanceId",
table: "WorkflowExecutionLogRecords",
column: "WorkflowInstanceId");
migrationBuilder.CreateIndex(
name: "IX_WorkflowInstance_ContextId",
table: "WorkflowInstances",
column: "ContextId");
migrationBuilder.CreateIndex(
name: "IX_WorkflowInstance_ContextType",
table: "WorkflowInstances",
column: "ContextType");
migrationBuilder.CreateIndex(
name: "IX_WorkflowInstance_CorrelationId",
table: "WorkflowInstances",
column: "CorrelationId");
migrationBuilder.CreateIndex(
name: "IX_WorkflowInstance_CreatedAt",
table: "WorkflowInstances",
column: "CreatedAt");
migrationBuilder.CreateIndex(
name: "IX_WorkflowInstance_DefinitionId",
table: "WorkflowInstances",
column: "DefinitionId");
migrationBuilder.CreateIndex(
name: "IX_WorkflowInstance_FaultedAt",
table: "WorkflowInstances",
column: "FaultedAt");
migrationBuilder.CreateIndex(
name: "IX_WorkflowInstance_FinishedAt",
table: "WorkflowInstances",
column: "FinishedAt");
migrationBuilder.CreateIndex(
name: "IX_WorkflowInstance_LastExecutedAt",
table: "WorkflowInstances",
column: "LastExecutedAt");
migrationBuilder.CreateIndex(
name: "IX_WorkflowInstance_Name",
table: "WorkflowInstances",
column: "Name");
migrationBuilder.CreateIndex(
name: "IX_WorkflowInstance_TenantId",
table: "WorkflowInstances",
column: "TenantId");
migrationBuilder.CreateIndex(
name: "IX_WorkflowInstance_WorkflowStatus",
table: "WorkflowInstances",
column: "WorkflowStatus");
migrationBuilder.CreateIndex(
name: "IX_WorkflowInstance_WorkflowStatus_DefinitionId_Version",
table: "WorkflowInstances",
columns: new[] { "WorkflowStatus", "DefinitionId", "Version" });
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "Bookmarks");
migrationBuilder.DropTable(
name: "WorkflowDefinitions");
migrationBuilder.DropTable(
name: "WorkflowExecutionLogRecords");
migrationBuilder.DropTable(
name: "WorkflowInstances");
}
}
}

View file

@ -0,0 +1,286 @@
// <auto-generated />
using System;
using Elsa.Persistence.EntityFramework.Core;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
namespace Elsa.Persistence.EntityFramework.MySql.Migrations
{
[DbContext(typeof(ElsaContext))]
partial class ElsaContextModelSnapshot : ModelSnapshot
{
protected override void BuildModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("Relational:MaxIdentifierLength", 64)
.HasAnnotation("ProductVersion", "5.0.5");
modelBuilder.Entity("Elsa.Models.Bookmark", b =>
{
b.Property<string>("Id")
.HasColumnType("varchar(255)");
b.Property<string>("ActivityId")
.IsRequired()
.HasColumnType("varchar(255)");
b.Property<string>("ActivityType")
.IsRequired()
.HasColumnType("varchar(255)");
b.Property<string>("Hash")
.IsRequired()
.HasColumnType("varchar(255)");
b.Property<string>("Model")
.IsRequired()
.HasColumnType("longtext");
b.Property<string>("ModelType")
.IsRequired()
.HasColumnType("longtext");
b.Property<string>("TenantId")
.HasColumnType("varchar(255)");
b.Property<string>("WorkflowInstanceId")
.IsRequired()
.HasColumnType("varchar(255)");
b.HasKey("Id");
b.HasIndex("ActivityId")
.HasDatabaseName("IX_Bookmark_ActivityId");
b.HasIndex("ActivityType")
.HasDatabaseName("IX_Bookmark_ActivityType");
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.ToTable("Bookmarks");
});
modelBuilder.Entity("Elsa.Models.WorkflowDefinition", b =>
{
b.Property<string>("Id")
.HasColumnType("varchar(255)");
b.Property<string>("Data")
.HasColumnType("longtext");
b.Property<string>("DefinitionId")
.IsRequired()
.HasColumnType("varchar(255)");
b.Property<bool>("DeleteCompletedInstances")
.HasColumnType("tinyint(1)");
b.Property<string>("Description")
.HasColumnType("longtext");
b.Property<string>("DisplayName")
.HasColumnType("longtext");
b.Property<bool>("IsLatest")
.HasColumnType("tinyint(1)");
b.Property<bool>("IsPublished")
.HasColumnType("tinyint(1)");
b.Property<bool>("IsSingleton")
.HasColumnType("tinyint(1)");
b.Property<string>("Name")
.HasColumnType("varchar(255)");
b.Property<int>("PersistenceBehavior")
.HasColumnType("int");
b.Property<string>("TenantId")
.HasColumnType("varchar(255)");
b.Property<int>("Version")
.HasColumnType("int");
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("TenantId")
.HasDatabaseName("IX_WorkflowDefinition_TenantId");
b.HasIndex("Version")
.HasDatabaseName("IX_WorkflowDefinition_Version");
b.HasIndex("DefinitionId", "Version")
.HasDatabaseName("IX_WorkflowDefinition_DefinitionId_VersionId");
b.ToTable("WorkflowDefinitions");
});
modelBuilder.Entity("Elsa.Models.WorkflowExecutionLogRecord", b =>
{
b.Property<string>("Id")
.HasColumnType("varchar(255)");
b.Property<string>("ActivityId")
.IsRequired()
.HasColumnType("varchar(255)");
b.Property<string>("ActivityType")
.IsRequired()
.HasColumnType("varchar(255)");
b.Property<string>("Data")
.HasColumnType("longtext");
b.Property<string>("EventName")
.HasColumnType("longtext");
b.Property<string>("Message")
.HasColumnType("longtext");
b.Property<string>("Source")
.HasColumnType("longtext");
b.Property<string>("TenantId")
.HasColumnType("varchar(255)");
b.Property<DateTimeOffset>("Timestamp")
.HasColumnType("datetime(6)");
b.Property<string>("WorkflowInstanceId")
.IsRequired()
.HasColumnType("varchar(255)");
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("varchar(255)");
b.Property<DateTimeOffset?>("CancelledAt")
.HasColumnType("datetime(6)");
b.Property<string>("ContextId")
.HasColumnType("varchar(255)");
b.Property<string>("ContextType")
.HasColumnType("varchar(255)");
b.Property<string>("CorrelationId")
.HasColumnType("varchar(255)");
b.Property<DateTimeOffset>("CreatedAt")
.HasColumnType("datetime(6)");
b.Property<string>("Data")
.HasColumnType("longtext");
b.Property<string>("DefinitionId")
.IsRequired()
.HasColumnType("varchar(255)");
b.Property<DateTimeOffset?>("FaultedAt")
.HasColumnType("datetime(6)");
b.Property<DateTimeOffset?>("FinishedAt")
.HasColumnType("datetime(6)");
b.Property<DateTimeOffset?>("LastExecutedAt")
.HasColumnType("datetime(6)");
b.Property<string>("Name")
.HasColumnType("varchar(255)");
b.Property<string>("TenantId")
.HasColumnType("varchar(255)");
b.Property<int>("Version")
.HasColumnType("int");
b.Property<int>("WorkflowStatus")
.HasColumnType("int");
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", "Version")
.HasDatabaseName("IX_WorkflowInstance_WorkflowStatus_DefinitionId_Version");
b.ToTable("WorkflowInstances");
});
#pragma warning restore 612, 618
}
}
}

View file

@ -0,0 +1,22 @@
using System;
using System.Linq;
using Elsa.Persistence.EntityFramework.Core;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Pomelo.EntityFrameworkCore.MySql.Infrastructure;
namespace Elsa.Persistence.EntityFramework.MySql
{
public class MySqlElsaContextFactory : IDesignTimeDbContextFactory<ElsaContext>
{
public ElsaContext CreateDbContext(string[] args)
{
var builder = new DbContextOptionsBuilder<ElsaContext>();
var connectionString = args.Any() ? args[0] : throw new InvalidOperationException("Please specify a connection string. E.g. dotnet ef database update -- \"Server=localhost;Port=3306;Database=elsa;User=root;Password=password\"");
builder.UseMySql(
connectionString,
ServerVersion.AutoDetect(args[0]),
db => db.MigrationsAssembly(typeof(MySqlElsaContextFactory).Assembly.GetName().Name));
return new ElsaContext(builder.Options);
}
}
}

View file

@ -0,0 +1,49 @@
### Usage
```
public void ConfigureServices(IServiceCollection services)
{
services.AddElsa(elsa =>
elsa
.AddWorkflow<MyWorkflow>()
.UseEntityFrameworkPersistence(
contextOptions =>
{
contextOptions.UseMySql(
"Server=localhost;Port=3306;Database=elsa;User=root;Password=password;");
},
autoRunMigrations: true)
);
}
```
### Entity Framework Core Commands
These commands are used by the package developer.
**Generate Migrations**
```
dotnet ef migrations add Initial
dotnet ef migrations add Update1
dotnet ef migrations add Update2
```
etc..
Optionally, specify a connection string:
```
dotnet ef migrations add Initial -- "{connection string}"
dotnet ef migrations add Update1 -- "{connection string}"
dotnet ef migrations add Update2 -- "{connection string}"
```
**Apply Migrations**
This
`dotnet ef database update -- "{connection string}"`

View file

@ -12,6 +12,7 @@
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.EntityFramework\Elsa.Persistence.EntityFramework.PostgreSql\Elsa.Persistence.EntityFramework.PostgreSql.csproj" />
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.EntityFramework\Elsa.Persistence.EntityFramework.Sqlite\Elsa.Persistence.EntityFramework.Sqlite.csproj" />
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.EntityFramework\Elsa.Persistence.EntityFramework.SqlServer\Elsa.Persistence.EntityFramework.SqlServer.csproj" />
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.EntityFramework\Elsa.Persistence.EntityFramework.MySql\Elsa.Persistence.EntityFramework.MySql.csproj" />
</ItemGroup>
<ItemGroup>

View file

@ -23,6 +23,8 @@ namespace Elsa.Samples.Persistence.EntityFramework
//ef.UsePostgreSql("Server=127.0.0.1;Port=5432;Database=elsa;User Id=postgres;Password=password;");
//ef.UseMySql("Server=localhost;Port=3306;Database=elsa;User=root;Password=password;");
ef.UseSqlServer("Server=localhost;Database=Elsa;Integrated Security=true");
})
.AddConsoleActivities()