From 728cf86f36cffa782ad32ec29f78d5cf22a75315 Mon Sep 17 00:00:00 2001 From: Lucas Lara Date: Sun, 2 Jun 2024 09:44:19 +0200 Subject: [PATCH] Update to EF Core 8 --- .editorconfig | 3 + .github/workflows/build.yml | 12 +- .husky/pre-commit | 2 +- .husky/task-runner.json | 7 +- .../StoragesBenchmark.csproj | 8 +- docker-compose.yml | 2 +- global.json | 2 +- samples/Api/Api.csproj | 2 +- samples/BpmnWorker/BpmnWorker.csproj | 10 +- samples/CarWorker/CarWorker.csproj | 4 +- samples/FlightWorker/FlightWorker.csproj | 4 +- samples/HotelWorker/HotelWorker.csproj | 4 +- .../OrchestrationWorker.csproj | 4 +- samples/Server/Server.csproj | 2 +- samples/Ui/Ui.csproj | 2 +- .../Endpoints/EntrypointEndpoint.cs | 9 +- .../LLL.DurableTask.Api.csproj | 4 +- .../LLL.DurableTask.AzureStorage.csproj | 8 +- .../LLL.DurableTask.Client.csproj | 10 +- .../LLL.DurableTask.Core.csproj | 6 +- .../LLL.DurableTask.EFCore.InMemory.csproj | 6 +- .../LLL.DurableTask.EFCore.MySql.csproj | 8 +- .../20240602074455_EFCore8.Designer.cs | 346 ++++++++++++++++++ .../Migrations/20240602074455_EFCore8.cs | 36 ++ .../OrchestrationDbContextModelSnapshot.cs | 7 +- .../LLL.DurableTask.EFCore.PostgreSQL.csproj | 8 +- .../20240602074528_EFCore8.Designer.cs | 346 ++++++++++++++++++ .../Migrations/20240602074528_EFCore8.cs | 21 ++ .../OrchestrationDbContextModelSnapshot.cs | 2 +- .../LLL.DurableTask.EFCore.SqlServer.csproj | 8 +- .../20240602074541_EFCore8.Designer.cs | 346 ++++++++++++++++++ .../Migrations/20240602074541_EFCore8.cs | 21 ++ .../OrchestrationDbContextModelSnapshot.cs | 2 +- .../LLL.DurableTask.EFCore.csproj | 10 +- .../LLL.DurableTask.Server.Grpc.Client.csproj | 16 +- .../LLL.DurableTask.Server.Grpc.csproj | 12 +- .../LLL.DurableTask.Server.csproj | 8 +- .../LLL.DurableTask.Ui.csproj | 6 +- .../LLL.DurableTask.Worker.csproj | 10 +- .../LLL.DurableTask.Tests.csproj | 18 +- .../ActivityClass/FailureDetailsTests.cs | 2 +- .../ActivityMethod/FailureDetailsTests.cs | 2 +- 42 files changed, 1232 insertions(+), 114 deletions(-) create mode 100644 src/LLL.DurableTask.EFCore.MySql/Migrations/20240602074455_EFCore8.Designer.cs create mode 100644 src/LLL.DurableTask.EFCore.MySql/Migrations/20240602074455_EFCore8.cs create mode 100644 src/LLL.DurableTask.EFCore.PostgreSQL/Migrations/20240602074528_EFCore8.Designer.cs create mode 100644 src/LLL.DurableTask.EFCore.PostgreSQL/Migrations/20240602074528_EFCore8.cs create mode 100644 src/LLL.DurableTask.EFCore.SqlServer/Migrations/20240602074541_EFCore8.Designer.cs create mode 100644 src/LLL.DurableTask.EFCore.SqlServer/Migrations/20240602074541_EFCore8.cs diff --git a/.editorconfig b/.editorconfig index 971b76b..408e4f8 100644 --- a/.editorconfig +++ b/.editorconfig @@ -38,6 +38,9 @@ indent_size = 2 # Dotnet code style settings: [*.{cs,vb}] +# EF1002: FromSqlRaw warnings +dotnet_diagnostic.EF1002.severity = none + # IDE0055: Fix formatting csharp_style_namespace_declarations = file_scoped:warning dotnet_diagnostic.IDE0055.severity = warning diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e5a7820..66af2ec 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -24,11 +24,7 @@ jobs: - name: Setup .NET Core uses: actions/setup-dotnet@v1 with: - dotnet-version: 6.0.x - - name: Setup .NET Core - uses: actions/setup-dotnet@v1 - with: - dotnet-version: 7.0.x + dotnet-version: 8.0.301 - name: Restore run: dotnet restore - name: Build @@ -85,11 +81,7 @@ jobs: - name: Setup .NET Core uses: actions/setup-dotnet@v1 with: - dotnet-version: 6.0.x - - name: Setup .NET Core - uses: actions/setup-dotnet@v1 - with: - dotnet-version: 7.0.x + dotnet-version: 8.0.301 - name: Create Release NuGet package run: | export Version=${GITHUB_REF:11} diff --git a/.husky/pre-commit b/.husky/pre-commit index 243c034..fd85d23 100644 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -19,4 +19,4 @@ ## or put your custom commands ------------------- #echo 'Husky.Net is awesome!' -echo 'Husky.Net is awesome!' +dotnet husky run diff --git a/.husky/task-runner.json b/.husky/task-runner.json index 7f65c78..b9ce6ce 100644 --- a/.husky/task-runner.json +++ b/.husky/task-runner.json @@ -1,6 +1,6 @@ { "tasks": [ - { + { "name": "Run dotnet format", "command": "dotnet", "args": [ @@ -12,7 +12,6 @@ "${staged}" ], "include": ["**/*.cs"] - } + } ] - } - \ No newline at end of file +} diff --git a/benchmark/StoragesBenchmark/StoragesBenchmark.csproj b/benchmark/StoragesBenchmark/StoragesBenchmark.csproj index a1f0248..6b8314d 100644 --- a/benchmark/StoragesBenchmark/StoragesBenchmark.csproj +++ b/benchmark/StoragesBenchmark/StoragesBenchmark.csproj @@ -1,14 +1,14 @@ - net7.0 + net8.0 - - - + + + diff --git a/docker-compose.yml b/docker-compose.yml index 852eb7d..f1210d2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -36,7 +36,7 @@ services: - SYS_PTRACE postgres: - image: postgres + image: postgres:15 ports: - 5432:5432 environment: diff --git a/global.json b/global.json index 77c776f..dea430a 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "7.0.100", + "version": "8.0.301", "rollForward": "latestFeature" } } diff --git a/samples/Api/Api.csproj b/samples/Api/Api.csproj index 0987eda..18efc7d 100644 --- a/samples/Api/Api.csproj +++ b/samples/Api/Api.csproj @@ -1,7 +1,7 @@ - net7.0 + net8.0 false diff --git a/samples/BpmnWorker/BpmnWorker.csproj b/samples/BpmnWorker/BpmnWorker.csproj index 07fb723..32a3cd2 100644 --- a/samples/BpmnWorker/BpmnWorker.csproj +++ b/samples/BpmnWorker/BpmnWorker.csproj @@ -1,15 +1,15 @@ - net7.0 + net8.0 false - - - - + + + + diff --git a/samples/CarWorker/CarWorker.csproj b/samples/CarWorker/CarWorker.csproj index 028aaa3..8b07de2 100644 --- a/samples/CarWorker/CarWorker.csproj +++ b/samples/CarWorker/CarWorker.csproj @@ -1,12 +1,12 @@ - net7.0 + net8.0 false - + diff --git a/samples/FlightWorker/FlightWorker.csproj b/samples/FlightWorker/FlightWorker.csproj index 028aaa3..8b07de2 100644 --- a/samples/FlightWorker/FlightWorker.csproj +++ b/samples/FlightWorker/FlightWorker.csproj @@ -1,12 +1,12 @@ - net7.0 + net8.0 false - + diff --git a/samples/HotelWorker/HotelWorker.csproj b/samples/HotelWorker/HotelWorker.csproj index 028aaa3..8b07de2 100644 --- a/samples/HotelWorker/HotelWorker.csproj +++ b/samples/HotelWorker/HotelWorker.csproj @@ -1,12 +1,12 @@ - net7.0 + net8.0 false - + diff --git a/samples/OrchestrationWorker/OrchestrationWorker.csproj b/samples/OrchestrationWorker/OrchestrationWorker.csproj index 028aaa3..8b07de2 100644 --- a/samples/OrchestrationWorker/OrchestrationWorker.csproj +++ b/samples/OrchestrationWorker/OrchestrationWorker.csproj @@ -1,12 +1,12 @@ - net7.0 + net8.0 false - + diff --git a/samples/Server/Server.csproj b/samples/Server/Server.csproj index f96e52e..9ff2ba9 100644 --- a/samples/Server/Server.csproj +++ b/samples/Server/Server.csproj @@ -1,7 +1,7 @@ - net7.0 + net8.0 false diff --git a/samples/Ui/Ui.csproj b/samples/Ui/Ui.csproj index ebd6369..2b7915e 100644 --- a/samples/Ui/Ui.csproj +++ b/samples/Ui/Ui.csproj @@ -1,7 +1,7 @@ - net7.0 + net8.0 false diff --git a/src/LLL.DurableTask.Api/Endpoints/EntrypointEndpoint.cs b/src/LLL.DurableTask.Api/Endpoints/EntrypointEndpoint.cs index 507f4e4..52f5d22 100644 --- a/src/LLL.DurableTask.Api/Endpoints/EntrypointEndpoint.cs +++ b/src/LLL.DurableTask.Api/Endpoints/EntrypointEndpoint.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using System.Linq; -using System.Threading.Tasks; using LLL.DurableTask.Api.Extensions; using LLL.DurableTask.Api.Metadata; using LLL.DurableTask.Api.Models; @@ -47,8 +46,12 @@ public static IReadOnlyList MapEntrypointEndpoint( if (policies.Length > 0) { var authorizationService = context.RequestServices.GetRequiredService(); - var authorizeTasks = policies.Select(p => authorizationService.AuthorizeAsync(context.User, p)); - authorized = (await Task.WhenAll(authorizeTasks)).All(r => r.Succeeded); + foreach (var policy in policies) + { + var authorizationResult = await authorizationService.AuthorizeAsync(context.User, policy); + if (!authorizationResult.Succeeded) + authorized = false; + } } var httpMethodMetadata = endpoint.Metadata.GetMetadata(); diff --git a/src/LLL.DurableTask.Api/LLL.DurableTask.Api.csproj b/src/LLL.DurableTask.Api/LLL.DurableTask.Api.csproj index 7ed86f3..620f857 100644 --- a/src/LLL.DurableTask.Api/LLL.DurableTask.Api.csproj +++ b/src/LLL.DurableTask.Api/LLL.DurableTask.Api.csproj @@ -1,7 +1,7 @@  - net7.0 + net8.0 @@ -13,7 +13,7 @@ - + diff --git a/src/LLL.DurableTask.AzureStorage/LLL.DurableTask.AzureStorage.csproj b/src/LLL.DurableTask.AzureStorage/LLL.DurableTask.AzureStorage.csproj index 2099cc4..889952e 100644 --- a/src/LLL.DurableTask.AzureStorage/LLL.DurableTask.AzureStorage.csproj +++ b/src/LLL.DurableTask.AzureStorage/LLL.DurableTask.AzureStorage.csproj @@ -1,7 +1,7 @@ - net7.0 + net8.0 @@ -9,9 +9,9 @@ - - - + + + diff --git a/src/LLL.DurableTask.Client/LLL.DurableTask.Client.csproj b/src/LLL.DurableTask.Client/LLL.DurableTask.Client.csproj index ef50726..705c288 100644 --- a/src/LLL.DurableTask.Client/LLL.DurableTask.Client.csproj +++ b/src/LLL.DurableTask.Client/LLL.DurableTask.Client.csproj @@ -1,7 +1,7 @@ - net7.0 + net8.0 @@ -9,10 +9,10 @@ - - - - + + + + diff --git a/src/LLL.DurableTask.Core/LLL.DurableTask.Core.csproj b/src/LLL.DurableTask.Core/LLL.DurableTask.Core.csproj index 1533401..1e315cf 100644 --- a/src/LLL.DurableTask.Core/LLL.DurableTask.Core.csproj +++ b/src/LLL.DurableTask.Core/LLL.DurableTask.Core.csproj @@ -1,7 +1,7 @@ - net7.0 + net8.0 @@ -9,7 +9,7 @@ - - + + diff --git a/src/LLL.DurableTask.EFCore.InMemory/LLL.DurableTask.EFCore.InMemory.csproj b/src/LLL.DurableTask.EFCore.InMemory/LLL.DurableTask.EFCore.InMemory.csproj index 2fdfe67..27e7d88 100644 --- a/src/LLL.DurableTask.EFCore.InMemory/LLL.DurableTask.EFCore.InMemory.csproj +++ b/src/LLL.DurableTask.EFCore.InMemory/LLL.DurableTask.EFCore.InMemory.csproj @@ -1,7 +1,7 @@ - net7.0 + net8.0 latest @@ -10,8 +10,8 @@ - - + + diff --git a/src/LLL.DurableTask.EFCore.MySql/LLL.DurableTask.EFCore.MySql.csproj b/src/LLL.DurableTask.EFCore.MySql/LLL.DurableTask.EFCore.MySql.csproj index b834223..799614e 100644 --- a/src/LLL.DurableTask.EFCore.MySql/LLL.DurableTask.EFCore.MySql.csproj +++ b/src/LLL.DurableTask.EFCore.MySql/LLL.DurableTask.EFCore.MySql.csproj @@ -1,7 +1,7 @@ - net7.0 + net8.0 @@ -13,12 +13,12 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all - - + + diff --git a/src/LLL.DurableTask.EFCore.MySql/Migrations/20240602074455_EFCore8.Designer.cs b/src/LLL.DurableTask.EFCore.MySql/Migrations/20240602074455_EFCore8.Designer.cs new file mode 100644 index 0000000..50623ef --- /dev/null +++ b/src/LLL.DurableTask.EFCore.MySql/Migrations/20240602074455_EFCore8.Designer.cs @@ -0,0 +1,346 @@ +// +using System; +using LLL.DurableTask.EFCore; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace LLL.DurableTask.EFCore.MySql.Migrations +{ + [DbContext(typeof(OrchestrationDbContext))] + [Migration("20240602074455_EFCore8")] + partial class EFCore8 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.6") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.ActivityMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("InstanceId") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("LockId") + .IsConcurrencyToken() + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("LockedUntil") + .HasColumnType("datetime(6)"); + + b.Property("Message") + .HasMaxLength(2147483647) + .HasColumnType("longtext"); + + b.Property("Queue") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("ReplyQueue") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.HasKey("Id"); + + b.HasIndex("InstanceId"); + + b.HasIndex("LockedUntil", "Queue"); + + b.ToTable("ActivityMessages"); + }); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.Event", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(2147483647) + .HasColumnType("longtext"); + + b.Property("ExecutionId") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("InstanceId") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("SequenceNumber") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ExecutionId"); + + b.HasIndex("InstanceId", "ExecutionId", "SequenceNumber") + .IsUnique(); + + b.ToTable("Events"); + }); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.Execution", b => + { + b.Property("ExecutionId") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("CompletedTime") + .HasColumnType("datetime(6)"); + + b.Property("CompressedSize") + .HasColumnType("bigint"); + + b.Property("CreatedTime") + .HasColumnType("datetime(6)"); + + b.Property("CustomStatus") + .HasColumnType("longtext"); + + b.Property("FailureDetails") + .HasMaxLength(2147483647) + .HasColumnType("longtext"); + + b.Property("Input") + .HasColumnType("longtext"); + + b.Property("InstanceId") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("LastUpdatedTime") + .HasColumnType("datetime(6)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("Output") + .HasColumnType("longtext"); + + b.Property("ParentInstance") + .HasMaxLength(2000) + .HasColumnType("varchar(2000)"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.Property("Status") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Version") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.HasKey("ExecutionId"); + + b.HasIndex("CompletedTime"); + + b.HasIndex("CreatedTime"); + + b.HasIndex("InstanceId"); + + b.HasIndex("Name"); + + b.HasIndex("Status"); + + b.HasIndex("CreatedTime", "InstanceId") + .IsDescending(); + + b.ToTable("Executions"); + }); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.Instance", b => + { + b.Property("InstanceId") + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("LastExecutionId") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("LastQueue") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("LockId") + .IsConcurrencyToken() + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("LockedUntil") + .HasColumnType("datetime(6)"); + + b.HasKey("InstanceId"); + + b.HasIndex("LastExecutionId") + .IsUnique(); + + b.HasIndex("InstanceId", "LockedUntil"); + + b.ToTable("Instances"); + }); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.OrchestrationMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(36) + .HasColumnType("char(36)"); + + b.Property("AvailableAt") + .HasColumnType("datetime(6)"); + + b.Property("ExecutionId") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("InstanceId") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("Message") + .HasMaxLength(2147483647) + .HasColumnType("longtext"); + + b.Property("Queue") + .HasColumnType("varchar(255)"); + + b.Property("SequenceNumber") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("InstanceId"); + + b.HasIndex("AvailableAt", "Queue", "InstanceId"); + + b.ToTable("OrchestrationMessages"); + }); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.ActivityMessage", b => + { + b.HasOne("LLL.DurableTask.EFCore.Entities.Instance", "Instance") + .WithMany() + .HasForeignKey("InstanceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Instance"); + }); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.Event", b => + { + b.HasOne("LLL.DurableTask.EFCore.Entities.Execution", "Execution") + .WithMany("Events") + .HasForeignKey("ExecutionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Execution"); + }); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.Execution", b => + { + b.OwnsMany("LLL.DurableTask.EFCore.Entities.Tag", "Tags", b1 => + { + b1.Property("ExecutionId") + .HasColumnType("varchar(100)"); + + b1.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b1.Property("Id")); + + b1.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b1.Property("Value") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("varchar(500)"); + + b1.HasKey("ExecutionId", "Id"); + + b1.HasIndex("ExecutionId", "Name") + .IsUnique(); + + b1.HasIndex("Name", "Value"); + + b1.ToTable("ExecutionTags", (string)null); + + b1.WithOwner() + .HasForeignKey("ExecutionId"); + }); + + b.Navigation("Tags"); + }); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.Instance", b => + { + b.HasOne("LLL.DurableTask.EFCore.Entities.Execution", "LastExecution") + .WithOne("LastExecutionInstance") + .HasForeignKey("LLL.DurableTask.EFCore.Entities.Instance", "LastExecutionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("LastExecution"); + }); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.OrchestrationMessage", b => + { + b.HasOne("LLL.DurableTask.EFCore.Entities.Instance", "Instance") + .WithMany() + .HasForeignKey("InstanceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Instance"); + }); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.Execution", b => + { + b.Navigation("Events"); + + b.Navigation("LastExecutionInstance"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/LLL.DurableTask.EFCore.MySql/Migrations/20240602074455_EFCore8.cs b/src/LLL.DurableTask.EFCore.MySql/Migrations/20240602074455_EFCore8.cs new file mode 100644 index 0000000..f3c9bc6 --- /dev/null +++ b/src/LLL.DurableTask.EFCore.MySql/Migrations/20240602074455_EFCore8.cs @@ -0,0 +1,36 @@ +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace LLL.DurableTask.EFCore.MySql.Migrations; + +/// +public partial class EFCore8 : Migration +{ + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "Id", + table: "ExecutionTags", + type: "int", + nullable: false, + oldClrType: typeof(int), + oldType: "int") + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "Id", + table: "ExecutionTags", + type: "int", + nullable: false, + oldClrType: typeof(int), + oldType: "int") + .OldAnnotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn); + } +} diff --git a/src/LLL.DurableTask.EFCore.MySql/Migrations/OrchestrationDbContextModelSnapshot.cs b/src/LLL.DurableTask.EFCore.MySql/Migrations/OrchestrationDbContextModelSnapshot.cs index c62b4b9..f2dfb66 100644 --- a/src/LLL.DurableTask.EFCore.MySql/Migrations/OrchestrationDbContextModelSnapshot.cs +++ b/src/LLL.DurableTask.EFCore.MySql/Migrations/OrchestrationDbContextModelSnapshot.cs @@ -3,6 +3,7 @@ using LLL.DurableTask.EFCore; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; #nullable disable @@ -16,9 +17,11 @@ protected override void BuildModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "7.0.2") + .HasAnnotation("ProductVersion", "8.0.6") .HasAnnotation("Relational:MaxIdentifierLength", 64); + MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.ActivityMessage", b => { b.Property("Id") @@ -278,6 +281,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) .ValueGeneratedOnAdd() .HasColumnType("int"); + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b1.Property("Id")); + b1.Property("Name") .IsRequired() .HasMaxLength(100) diff --git a/src/LLL.DurableTask.EFCore.PostgreSQL/LLL.DurableTask.EFCore.PostgreSQL.csproj b/src/LLL.DurableTask.EFCore.PostgreSQL/LLL.DurableTask.EFCore.PostgreSQL.csproj index 03c0279..0f5ac02 100644 --- a/src/LLL.DurableTask.EFCore.PostgreSQL/LLL.DurableTask.EFCore.PostgreSQL.csproj +++ b/src/LLL.DurableTask.EFCore.PostgreSQL/LLL.DurableTask.EFCore.PostgreSQL.csproj @@ -1,7 +1,7 @@ - net7.0 + net8.0 @@ -9,12 +9,12 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + diff --git a/src/LLL.DurableTask.EFCore.PostgreSQL/Migrations/20240602074528_EFCore8.Designer.cs b/src/LLL.DurableTask.EFCore.PostgreSQL/Migrations/20240602074528_EFCore8.Designer.cs new file mode 100644 index 0000000..1dd2a1b --- /dev/null +++ b/src/LLL.DurableTask.EFCore.PostgreSQL/Migrations/20240602074528_EFCore8.Designer.cs @@ -0,0 +1,346 @@ +// +using System; +using LLL.DurableTask.EFCore; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace LLL.DurableTask.EFCore.PostgreSQL.Migrations +{ + [DbContext(typeof(OrchestrationDbContext))] + [Migration("20240602074528_EFCore8")] + partial class EFCore8 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.6") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.ActivityMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("InstanceId") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("character varying(250)"); + + b.Property("LockId") + .IsConcurrencyToken() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("LockedUntil") + .HasColumnType("timestamp with time zone"); + + b.Property("Message") + .HasMaxLength(2147483647) + .HasColumnType("text"); + + b.Property("Queue") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("character varying(250)"); + + b.Property("ReplyQueue") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("character varying(250)"); + + b.HasKey("Id"); + + b.HasIndex("InstanceId"); + + b.HasIndex("LockedUntil", "Queue"); + + b.ToTable("ActivityMessages"); + }); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.Event", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(2147483647) + .HasColumnType("text"); + + b.Property("ExecutionId") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("InstanceId") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("character varying(250)"); + + b.Property("SequenceNumber") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("ExecutionId"); + + b.HasIndex("InstanceId", "ExecutionId", "SequenceNumber") + .IsUnique(); + + b.ToTable("Events"); + }); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.Execution", b => + { + b.Property("ExecutionId") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("CompletedTime") + .HasColumnType("timestamp with time zone"); + + b.Property("CompressedSize") + .HasColumnType("bigint"); + + b.Property("CreatedTime") + .HasColumnType("timestamp with time zone"); + + b.Property("CustomStatus") + .HasColumnType("text"); + + b.Property("FailureDetails") + .HasMaxLength(2147483647) + .HasColumnType("text"); + + b.Property("Input") + .HasColumnType("text"); + + b.Property("InstanceId") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("character varying(250)"); + + b.Property("LastUpdatedTime") + .HasColumnType("timestamp with time zone"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("character varying(250)"); + + b.Property("Output") + .HasColumnType("text"); + + b.Property("ParentInstance") + .HasMaxLength(2000) + .HasColumnType("character varying(2000)"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.Property("Status") + .IsRequired() + .HasColumnType("text"); + + b.Property("Version") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.HasKey("ExecutionId"); + + b.HasIndex("CompletedTime"); + + b.HasIndex("CreatedTime"); + + b.HasIndex("InstanceId"); + + b.HasIndex("Name"); + + b.HasIndex("Status"); + + b.HasIndex("CreatedTime", "InstanceId") + .IsDescending(); + + b.ToTable("Executions"); + }); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.Instance", b => + { + b.Property("InstanceId") + .HasMaxLength(250) + .HasColumnType("character varying(250)"); + + b.Property("LastExecutionId") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("LastQueue") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("character varying(250)"); + + b.Property("LockId") + .IsConcurrencyToken() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("LockedUntil") + .HasColumnType("timestamp with time zone"); + + b.HasKey("InstanceId"); + + b.HasIndex("LastExecutionId") + .IsUnique(); + + b.HasIndex("InstanceId", "LockedUntil"); + + b.ToTable("Instances"); + }); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.OrchestrationMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(36) + .HasColumnType("uuid"); + + b.Property("AvailableAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ExecutionId") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("InstanceId") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("character varying(250)"); + + b.Property("Message") + .HasMaxLength(2147483647) + .HasColumnType("text"); + + b.Property("Queue") + .HasColumnType("text"); + + b.Property("SequenceNumber") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("InstanceId"); + + b.HasIndex("AvailableAt", "Queue", "InstanceId"); + + b.ToTable("OrchestrationMessages"); + }); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.ActivityMessage", b => + { + b.HasOne("LLL.DurableTask.EFCore.Entities.Instance", "Instance") + .WithMany() + .HasForeignKey("InstanceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Instance"); + }); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.Event", b => + { + b.HasOne("LLL.DurableTask.EFCore.Entities.Execution", "Execution") + .WithMany("Events") + .HasForeignKey("ExecutionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Execution"); + }); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.Execution", b => + { + b.OwnsMany("LLL.DurableTask.EFCore.Entities.Tag", "Tags", b1 => + { + b1.Property("ExecutionId") + .HasColumnType("character varying(100)"); + + b1.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b1.Property("Id")); + + b1.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b1.Property("Value") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("character varying(500)"); + + b1.HasKey("ExecutionId", "Id"); + + b1.HasIndex("ExecutionId", "Name") + .IsUnique(); + + b1.HasIndex("Name", "Value"); + + b1.ToTable("ExecutionTags", (string)null); + + b1.WithOwner() + .HasForeignKey("ExecutionId"); + }); + + b.Navigation("Tags"); + }); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.Instance", b => + { + b.HasOne("LLL.DurableTask.EFCore.Entities.Execution", "LastExecution") + .WithOne("LastExecutionInstance") + .HasForeignKey("LLL.DurableTask.EFCore.Entities.Instance", "LastExecutionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("LastExecution"); + }); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.OrchestrationMessage", b => + { + b.HasOne("LLL.DurableTask.EFCore.Entities.Instance", "Instance") + .WithMany() + .HasForeignKey("InstanceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Instance"); + }); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.Execution", b => + { + b.Navigation("Events"); + + b.Navigation("LastExecutionInstance"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/LLL.DurableTask.EFCore.PostgreSQL/Migrations/20240602074528_EFCore8.cs b/src/LLL.DurableTask.EFCore.PostgreSQL/Migrations/20240602074528_EFCore8.cs new file mode 100644 index 0000000..92d4e0d --- /dev/null +++ b/src/LLL.DurableTask.EFCore.PostgreSQL/Migrations/20240602074528_EFCore8.cs @@ -0,0 +1,21 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace LLL.DurableTask.EFCore.PostgreSQL.Migrations; + +/// +public partial class EFCore8 : Migration +{ + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } +} diff --git a/src/LLL.DurableTask.EFCore.PostgreSQL/Migrations/OrchestrationDbContextModelSnapshot.cs b/src/LLL.DurableTask.EFCore.PostgreSQL/Migrations/OrchestrationDbContextModelSnapshot.cs index bbde7c4..7260cd9 100644 --- a/src/LLL.DurableTask.EFCore.PostgreSQL/Migrations/OrchestrationDbContextModelSnapshot.cs +++ b/src/LLL.DurableTask.EFCore.PostgreSQL/Migrations/OrchestrationDbContextModelSnapshot.cs @@ -17,7 +17,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "7.0.2") + .HasAnnotation("ProductVersion", "8.0.6") .HasAnnotation("Relational:MaxIdentifierLength", 63); NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); diff --git a/src/LLL.DurableTask.EFCore.SqlServer/LLL.DurableTask.EFCore.SqlServer.csproj b/src/LLL.DurableTask.EFCore.SqlServer/LLL.DurableTask.EFCore.SqlServer.csproj index 98f257d..869865c 100644 --- a/src/LLL.DurableTask.EFCore.SqlServer/LLL.DurableTask.EFCore.SqlServer.csproj +++ b/src/LLL.DurableTask.EFCore.SqlServer/LLL.DurableTask.EFCore.SqlServer.csproj @@ -1,7 +1,7 @@ - net7.0 + net8.0 @@ -10,12 +10,12 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all - - + + diff --git a/src/LLL.DurableTask.EFCore.SqlServer/Migrations/20240602074541_EFCore8.Designer.cs b/src/LLL.DurableTask.EFCore.SqlServer/Migrations/20240602074541_EFCore8.Designer.cs new file mode 100644 index 0000000..8eee9ca --- /dev/null +++ b/src/LLL.DurableTask.EFCore.SqlServer/Migrations/20240602074541_EFCore8.Designer.cs @@ -0,0 +1,346 @@ +// +using System; +using LLL.DurableTask.EFCore; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace LLL.DurableTask.EFCore.SqlServer.Migrations +{ + [DbContext(typeof(OrchestrationDbContext))] + [Migration("20240602074541_EFCore8")] + partial class EFCore8 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.6") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.ActivityMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("InstanceId") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar(250)"); + + b.Property("LockId") + .IsConcurrencyToken() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("LockedUntil") + .HasColumnType("datetime2"); + + b.Property("Message") + .HasMaxLength(2147483647) + .HasColumnType("nvarchar(max)"); + + b.Property("Queue") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar(250)"); + + b.Property("ReplyQueue") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar(250)"); + + b.HasKey("Id"); + + b.HasIndex("InstanceId"); + + b.HasIndex("LockedUntil", "Queue"); + + b.ToTable("ActivityMessages"); + }); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.Event", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(2147483647) + .HasColumnType("nvarchar(max)"); + + b.Property("ExecutionId") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("InstanceId") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar(250)"); + + b.Property("SequenceNumber") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ExecutionId"); + + b.HasIndex("InstanceId", "ExecutionId", "SequenceNumber") + .IsUnique(); + + b.ToTable("Events"); + }); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.Execution", b => + { + b.Property("ExecutionId") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("CompletedTime") + .HasColumnType("datetime2"); + + b.Property("CompressedSize") + .HasColumnType("bigint"); + + b.Property("CreatedTime") + .HasColumnType("datetime2"); + + b.Property("CustomStatus") + .HasColumnType("nvarchar(max)"); + + b.Property("FailureDetails") + .HasMaxLength(2147483647) + .HasColumnType("nvarchar(max)"); + + b.Property("Input") + .HasColumnType("nvarchar(max)"); + + b.Property("InstanceId") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar(250)"); + + b.Property("LastUpdatedTime") + .HasColumnType("datetime2"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar(250)"); + + b.Property("Output") + .HasColumnType("nvarchar(max)"); + + b.Property("ParentInstance") + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.Property("Status") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Version") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.HasKey("ExecutionId"); + + b.HasIndex("CompletedTime"); + + b.HasIndex("CreatedTime"); + + b.HasIndex("InstanceId"); + + b.HasIndex("Name"); + + b.HasIndex("Status"); + + b.HasIndex("CreatedTime", "InstanceId") + .IsDescending(); + + b.ToTable("Executions"); + }); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.Instance", b => + { + b.Property("InstanceId") + .HasMaxLength(250) + .HasColumnType("nvarchar(250)"); + + b.Property("LastExecutionId") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("LastQueue") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar(250)"); + + b.Property("LockId") + .IsConcurrencyToken() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("LockedUntil") + .HasColumnType("datetime2"); + + b.HasKey("InstanceId"); + + b.HasIndex("LastExecutionId") + .IsUnique(); + + b.HasIndex("InstanceId", "LockedUntil"); + + b.ToTable("Instances"); + }); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.OrchestrationMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(36) + .HasColumnType("uniqueidentifier"); + + b.Property("AvailableAt") + .HasColumnType("datetime2"); + + b.Property("ExecutionId") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("InstanceId") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar(250)"); + + b.Property("Message") + .HasMaxLength(2147483647) + .HasColumnType("nvarchar(max)"); + + b.Property("Queue") + .HasColumnType("nvarchar(450)"); + + b.Property("SequenceNumber") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("InstanceId"); + + b.HasIndex("AvailableAt", "Queue", "InstanceId"); + + b.ToTable("OrchestrationMessages"); + }); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.ActivityMessage", b => + { + b.HasOne("LLL.DurableTask.EFCore.Entities.Instance", "Instance") + .WithMany() + .HasForeignKey("InstanceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Instance"); + }); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.Event", b => + { + b.HasOne("LLL.DurableTask.EFCore.Entities.Execution", "Execution") + .WithMany("Events") + .HasForeignKey("ExecutionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Execution"); + }); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.Execution", b => + { + b.OwnsMany("LLL.DurableTask.EFCore.Entities.Tag", "Tags", b1 => + { + b1.Property("ExecutionId") + .HasColumnType("nvarchar(100)"); + + b1.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property("Id")); + + b1.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b1.Property("Value") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b1.HasKey("ExecutionId", "Id"); + + b1.HasIndex("ExecutionId", "Name") + .IsUnique(); + + b1.HasIndex("Name", "Value"); + + b1.ToTable("ExecutionTags", (string)null); + + b1.WithOwner() + .HasForeignKey("ExecutionId"); + }); + + b.Navigation("Tags"); + }); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.Instance", b => + { + b.HasOne("LLL.DurableTask.EFCore.Entities.Execution", "LastExecution") + .WithOne("LastExecutionInstance") + .HasForeignKey("LLL.DurableTask.EFCore.Entities.Instance", "LastExecutionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("LastExecution"); + }); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.OrchestrationMessage", b => + { + b.HasOne("LLL.DurableTask.EFCore.Entities.Instance", "Instance") + .WithMany() + .HasForeignKey("InstanceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Instance"); + }); + + modelBuilder.Entity("LLL.DurableTask.EFCore.Entities.Execution", b => + { + b.Navigation("Events"); + + b.Navigation("LastExecutionInstance"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/LLL.DurableTask.EFCore.SqlServer/Migrations/20240602074541_EFCore8.cs b/src/LLL.DurableTask.EFCore.SqlServer/Migrations/20240602074541_EFCore8.cs new file mode 100644 index 0000000..f0d34ae --- /dev/null +++ b/src/LLL.DurableTask.EFCore.SqlServer/Migrations/20240602074541_EFCore8.cs @@ -0,0 +1,21 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace LLL.DurableTask.EFCore.SqlServer.Migrations; + +/// +public partial class EFCore8 : Migration +{ + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } +} diff --git a/src/LLL.DurableTask.EFCore.SqlServer/Migrations/OrchestrationDbContextModelSnapshot.cs b/src/LLL.DurableTask.EFCore.SqlServer/Migrations/OrchestrationDbContextModelSnapshot.cs index a6131d9..7f77fb6 100644 --- a/src/LLL.DurableTask.EFCore.SqlServer/Migrations/OrchestrationDbContextModelSnapshot.cs +++ b/src/LLL.DurableTask.EFCore.SqlServer/Migrations/OrchestrationDbContextModelSnapshot.cs @@ -17,7 +17,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "7.0.2") + .HasAnnotation("ProductVersion", "8.0.6") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); diff --git a/src/LLL.DurableTask.EFCore/LLL.DurableTask.EFCore.csproj b/src/LLL.DurableTask.EFCore/LLL.DurableTask.EFCore.csproj index 64981ba..3b7bc9c 100644 --- a/src/LLL.DurableTask.EFCore/LLL.DurableTask.EFCore.csproj +++ b/src/LLL.DurableTask.EFCore/LLL.DurableTask.EFCore.csproj @@ -1,7 +1,7 @@ - net7.0 + net8.0 latest @@ -10,10 +10,10 @@ - - - - + + + + diff --git a/src/LLL.DurableTask.Server.Grpc.Client/LLL.DurableTask.Server.Grpc.Client.csproj b/src/LLL.DurableTask.Server.Grpc.Client/LLL.DurableTask.Server.Grpc.Client.csproj index a907684..f57a641 100644 --- a/src/LLL.DurableTask.Server.Grpc.Client/LLL.DurableTask.Server.Grpc.Client.csproj +++ b/src/LLL.DurableTask.Server.Grpc.Client/LLL.DurableTask.Server.Grpc.Client.csproj @@ -1,7 +1,7 @@ - net7.0 + net8.0 @@ -9,17 +9,17 @@ - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + - - + + diff --git a/src/LLL.DurableTask.Server.Grpc/LLL.DurableTask.Server.Grpc.csproj b/src/LLL.DurableTask.Server.Grpc/LLL.DurableTask.Server.Grpc.csproj index c100e3c..deb85ae 100644 --- a/src/LLL.DurableTask.Server.Grpc/LLL.DurableTask.Server.Grpc.csproj +++ b/src/LLL.DurableTask.Server.Grpc/LLL.DurableTask.Server.Grpc.csproj @@ -1,7 +1,7 @@  - net7.0 + net8.0 @@ -13,15 +13,15 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + - - + + diff --git a/src/LLL.DurableTask.Server/LLL.DurableTask.Server.csproj b/src/LLL.DurableTask.Server/LLL.DurableTask.Server.csproj index 4962d9f..b53a23d 100644 --- a/src/LLL.DurableTask.Server/LLL.DurableTask.Server.csproj +++ b/src/LLL.DurableTask.Server/LLL.DurableTask.Server.csproj @@ -1,7 +1,7 @@ - net7.0 + net8.0 @@ -9,9 +9,9 @@ - - - + + + diff --git a/src/LLL.DurableTask.Ui/LLL.DurableTask.Ui.csproj b/src/LLL.DurableTask.Ui/LLL.DurableTask.Ui.csproj index 71d7aa3..654284d 100644 --- a/src/LLL.DurableTask.Ui/LLL.DurableTask.Ui.csproj +++ b/src/LLL.DurableTask.Ui/LLL.DurableTask.Ui.csproj @@ -1,7 +1,7 @@ - net7.0 + net8.0 true app\ $(DefaultItemExcludes);$(SpaRoot)node_modules\** @@ -13,11 +13,11 @@ - + - + diff --git a/src/LLL.DurableTask.Worker/LLL.DurableTask.Worker.csproj b/src/LLL.DurableTask.Worker/LLL.DurableTask.Worker.csproj index 6767e2f..6fc3070 100644 --- a/src/LLL.DurableTask.Worker/LLL.DurableTask.Worker.csproj +++ b/src/LLL.DurableTask.Worker/LLL.DurableTask.Worker.csproj @@ -1,7 +1,7 @@ - net7.0 + net8.0 @@ -9,10 +9,10 @@ - - - - + + + + diff --git a/test/LLL.DurableTask.Tests/LLL.DurableTask.Tests.csproj b/test/LLL.DurableTask.Tests/LLL.DurableTask.Tests.csproj index dd07c57..c4bf4ae 100644 --- a/test/LLL.DurableTask.Tests/LLL.DurableTask.Tests.csproj +++ b/test/LLL.DurableTask.Tests/LLL.DurableTask.Tests.csproj @@ -1,22 +1,22 @@ - net7.0 + net8.0 false - - - - - - - + + + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/test/LLL.DurableTask.Tests/Worker/ActivityClass/FailureDetailsTests.cs b/test/LLL.DurableTask.Tests/Worker/ActivityClass/FailureDetailsTests.cs index 0cd875d..4959ca3 100644 --- a/test/LLL.DurableTask.Tests/Worker/ActivityClass/FailureDetailsTests.cs +++ b/test/LLL.DurableTask.Tests/Worker/ActivityClass/FailureDetailsTests.cs @@ -41,7 +41,7 @@ public async Task ThrowException_ShouldHaveFailureDetails() result.OrchestrationStatus.Should().Be(OrchestrationStatus.Failed); result.FailureDetails.Should().NotBeNull(); - result.FailureDetails.ErrorMessage.Should().Match("Task '*' (#0) failed with an unhandled exception: SomeError"); + result.FailureDetails.ErrorMessage.Should().Contain("SomeError"); } [Activity(Name = "Throw")] diff --git a/test/LLL.DurableTask.Tests/Worker/ActivityMethod/FailureDetailsTests.cs b/test/LLL.DurableTask.Tests/Worker/ActivityMethod/FailureDetailsTests.cs index 622ae38..9c896f1 100644 --- a/test/LLL.DurableTask.Tests/Worker/ActivityMethod/FailureDetailsTests.cs +++ b/test/LLL.DurableTask.Tests/Worker/ActivityMethod/FailureDetailsTests.cs @@ -42,7 +42,7 @@ public async Task ThrowException_ShouldHaveFailureDetails(string activityName) result.OrchestrationStatus.Should().Be(OrchestrationStatus.Failed); result.FailureDetails.Should().NotBeNull(); - result.FailureDetails.ErrorMessage.Should().Match("Task '*' (#0) failed with an unhandled exception: SomeError"); + result.FailureDetails.ErrorMessage.Should().Contain("SomeError"); } public class Activities