Fix DbContext pooling (#6531)

* Enable DbContext pooling and refactor DI scopes

Added support for using DbContext pooling with a configurable option. Refactored to use scoped service providers for better isolation and lifecycle management. Updated persistence feature base to integrate sensitive data logging and warning configurations.

* Update package management and Elsa Studio version references

Centralized package versioning remains enabled, while unused package references and conditional groups for specific .NET targets are removed for simplification. Elsa Studio version is upgraded from 3.3.0-rc4 to 3.4.0-rc1.

* Simplify DbContextOptions setup logic

Removed conditional compilation and unused code to streamline the DbContextOptions configuration. This improves maintainability and ensures consistent behavior across frameworks. Sensitive data logging is no longer explicitly enabled here.
This commit is contained in:
Sipke Schoorstra 2025-03-26 16:05:40 +01:00 committed by GitHub
parent 9575cdeecf
commit 06b9907d85
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 222 additions and 273 deletions

View file

@ -37,6 +37,6 @@
<NoWarn>$(NoWarn);IL2026;IL2046;IL2057;IL2067;IL2070;IL2072;IL2075;IL2087;IL2091</NoWarn>
</PropertyGroup>
<PropertyGroup>
<ElsaStudioVersion>3.3.0-rc4</ElsaStudioVersion>
<ElsaStudioVersion>3.4.0-rc1</ElsaStudioVersion>
</PropertyGroup>
</Project>

View file

@ -1,254 +1,168 @@
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
<CentralPackageTransitivePinningEnabled>true</CentralPackageTransitivePinningEnabled>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="Antlr4.Runtime.Standard" Version="4.13.1" />
<PackageVersion Include="AppAny.Quartz.EntityFrameworkCore.Migrations" Version="0.5.1" />
<PackageVersion Include="AppAny.Quartz.EntityFrameworkCore.Migrations.MySql" Version="0.5.1" />
<PackageVersion Include="AppAny.Quartz.EntityFrameworkCore.Migrations.PostgreSQL" Version="0.5.1" />
<PackageVersion Include="AppAny.Quartz.EntityFrameworkCore.Migrations.SQLite" Version="0.5.1" />
<PackageVersion Include="AppAny.Quartz.EntityFrameworkCore.Migrations.SqlServer" Version="0.5.1" />
<PackageVersion Include="AutoMapper" Version="14.0.0" PrivateAssets="All" />
<PackageVersion Include="Azure.Identity" Version="1.13.2" />
<PackageVersion Include="Azure.Messaging.ServiceBus" Version="7.18.4" />
<PackageVersion Include="Azure.ResourceManager" Version="1.13.0" />
<PackageVersion Include="Azure.ResourceManager.AppContainers" Version="1.3.0" />
<PackageVersion Include="Azure.ResourceManager.Resources" Version="1.9.0" />
<PackageVersion Include="Azure.ResourceManager.ServiceBus" Version="1.1.0" />
<PackageVersion Include="BenchmarkDotNet" Version="0.14.0" />
<PackageVersion Include="Bogus" Version="35.6.2" />
<PackageVersion Include="ConfigureAwait.Fody" Version="3.3.2" PrivateAssets="All" />
<PackageVersion Include="Confluent.Kafka" Version="2.8.0" />
<PackageVersion Include="Confluent.SchemaRegistry.Serdes.Avro" Version="2.8.0" />
<PackageVersion Include="coverlet.collector" Version="6.0.4" PrivateAssets="All" />
<PackageVersion Include="Cronos" Version="0.9.0" />
<PackageVersion Include="Dapper" Version="2.1.66" />
<PackageVersion Include="Datadog.Trace.Bundle" Version="3.12.0" />
<PackageVersion Include="DistributedLock.Core" Version="1.0.8" />
<PackageVersion Include="DistributedLock.FileSystem" Version="1.0.3" />
<PackageVersion Include="DistributedLock.Postgres" Version="1.3.0" />
<PackageVersion Include="DistributedLock.Redis" Version="1.0.3" />
<PackageVersion Include="Elastic.Clients.Elasticsearch" Version="8.17.1" />
<PackageVersion Include="Elsa.Studio" Version="3.3.4" />
<PackageVersion Include="Elsa.Studio.Agents" Version="3.3.4" />
<PackageVersion Include="Elsa.Studio.Core.BlazorWasm" Version="3.3.4" />
<PackageVersion Include="Elsa.Studio.Login.BlazorWasm" Version="3.3.4" />
<PackageVersion Include="FastEndpoints" Version="5.35.0" />
<PackageVersion Include="FastEndpoints.Security" Version="5.35.0" />
<PackageVersion Include="FastEndpoints.Swagger" Version="5.35.0" />
<PackageVersion Include="FluentMigrator" Version="6.2.0" />
<PackageVersion Include="FluentMigrator.Runner" Version="6.2.0" />
<PackageVersion Include="FluentStorage" Version="5.6.0" />
<PackageVersion Include="FluentStorage.Azure.Blobs" Version="5.3.0" />
<PackageVersion Include="Fluid.Core" Version="2.19.0" />
<PackageVersion Include="Fody" Version="6.9.2" />
<PackageVersion Include="GitHubActionsTestLogger" Version="2.4.1" />
<PackageVersion Include="Google.Protobuf" Version="3.30.0" />
<PackageVersion Include="Grpc.Net.Client" Version="2.70.0" />
<PackageVersion Include="Grpc.Tools" Version="2.71.0" />
<PackageVersion Include="Hangfire" Version="1.8.18" />
<PackageVersion Include="Hangfire.MemoryStorage" Version="1.8.1.1" />
<PackageVersion Include="Hangfire.PostgreSql" Version="1.20.10" />
<PackageVersion Include="Hangfire.Storage.SQLite" Version="0.4.2" />
<PackageVersion Include="Humanizer.Core" Version="2.14.1" />
<PackageVersion Include="IronCompress" Version="1.6.3" />
<PackageVersion Include="JetBrains.Annotations" Version="2024.3.0" />
<PackageVersion Include="Jint" Version="4.2.1" />
<PackageVersion Include="LinqKit.Core" Version="1.2.8" />
<PackageVersion Include="MailKit" Version="4.11.0" />
<PackageVersion Include="MassTransit" Version="8.3.7" />
<PackageVersion Include="MassTransit.Azure.ServiceBus.Core" Version="8.3.7" />
<PackageVersion Include="MassTransit.Extensions.DependencyInjection" Version="7.3.1" />
<PackageVersion Include="MassTransit.RabbitMQ" Version="8.3.7" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="4.13.0" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite.Design" Version="1.1.6" />
<PackageVersion Include="Microsoft.Data.SqlClient" Version="6.0.1" />
<PackageVersion Include="Microsoft.Identity.Client" Version="4.69.1" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="8.0.0" />
<PackageVersion Include="MongoDB.Driver" Version="3.2.1" />
<PackageVersion Include="MongoDB.Driver.Core.Extensions.DiagnosticSources" Version="2.0.0" />
<PackageVersion Include="MongoDB.Driver.Extensions" Version="2.0.2" />
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
<PackageVersion Include="NSubstitute" Version="5.3.0" />
<PackageVersion Include="NuGet.Packaging" Version="6.13.2" />
<PackageVersion Include="NuGet.Protocol" Version="6.13.2" />
<PackageVersion Include="Nuke.Components" Version="9.0.4" />
<PackageVersion Include="Open.Linq.AsyncExtensions" Version="1.2.0" />
<PackageVersion Include="OpenTelemetry" Version="1.11.2" />
<PackageVersion Include="OpenTelemetry.AutoInstrumentation" Version="1.11.0" />
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.11.2" />
<PackageVersion Include="OpenTelemetry.Exporter.Console" Version="1.11.2" />
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.11.2" />
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.11.1" />
<PackageVersion Include="OpenTelemetry.Instrumentation.Http" Version="1.11.1" />
<PackageVersion Include="OpenTelemetry.Instrumentation.SqlClient" Version="1.11.0-beta.2" />
<PackageVersion Include="OpenTelemetry.Instrumentation.StackExchangeRedis" Version="1.11.0-beta.2" />
<PackageVersion Include="Polly.Extensions.Http" Version="3.0.0" />
<PackageVersion Include="PolySharp" Version="1.15.0" />
<PackageVersion Include="Proto.Actor" Version="1.7.0" />
<PackageVersion Include="Proto.Cluster" Version="1.7.0" />
<PackageVersion Include="Proto.Cluster.CodeGen" Version="1.7.0" />
<PackageVersion Include="Proto.Cluster.AzureContainerApps" Version="1.7.0" />
<PackageVersion Include="Proto.Cluster.Kubernetes" Version="1.7.0" />
<PackageVersion Include="Proto.Cluster.TestProvider" Version="1.7.0" />
<PackageVersion Include="Proto.OpenTelemetry" Version="1.7.0" />
<PackageVersion Include="Proto.Persistence" Version="1.7.0" />
<PackageVersion Include="Proto.Persistence.Sqlite" Version="1.7.0" />
<PackageVersion Include="Proto.Persistence.SqlServer" Version="1.7.0" />
<PackageVersion Include="Proto.Remote" Version="1.7.0" />
<PackageVersion Include="pythonnet" Version="3.1.0-preview2024-09-06" />
<PackageVersion Include="Quartz.Extensions.Hosting" Version="3.14.0" />
<PackageVersion Include="Quartz.Serialization.Json" Version="3.14.0" />
<PackageVersion Include="Scrutor" Version="6.0.1" />
<PackageVersion Include="ShortGuid" Version="2.0.1" />
<PackageVersion Include="StackExchange.Redis" Version="2.8.31" />
<PackageVersion Include="System.CommandLine" Version="2.0.0-beta4.22272.1" />
<PackageVersion Include="System.Data.SqlClient" Version="4.9.0" />
<PackageVersion Include="System.Linq.Async" Version="6.0.1" />
<PackageVersion Include="System.Linq.Dynamic.Core" Version="1.6.0.2" />
<PackageVersion Include="System.Net.Http" Version="4.3.4" />
<PackageVersion Include="System.Text.RegularExpressions" Version="4.3.1" />
<PackageVersion Include="Testcontainers" Version="4.3.0" />
<PackageVersion Include="Testcontainers.PostgreSql" Version="4.3.0" />
<PackageVersion Include="Testcontainers.RabbitMq" Version="4.3.0" />
<PackageVersion Include="Testcontainers.Redis" Version="4.3.0" />
<PackageVersion Include="ThrottleDebounce" Version="2.0.0" />
<PackageVersion Include="WebhooksCore" Version="0.0.1" />
<PackageVersion Include="xunit" Version="2.9.3" />
<PackageVersion Include="xunit.abstractions" Version="2.0.3" />
<PackageVersion Include="xunit.extensibility.core" Version="2.9.3" />
<PackageVersion Include="xunit.runner.visualstudio" Version="3.0.2" />
<PackageVersion Include="Yarp.ReverseProxy" Version="2.3.0" />
<PackageVersion Include="AspNetCore.Authentication.ApiKey" Version="8.0.1" />
<PackageVersion Include="Microsoft.AspNetCore.Authorization" Version="9.0.3" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly" Version="9.0.3" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="9.0.3" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="9.0.3" />
<PackageVersion Include="Microsoft.AspNetCore.DataProtection.Abstractions" Version="9.0.3" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="9.0.3" />
<PackageVersion Include="Microsoft.Data.Sqlite" Version="9.0.3" />
<PackageVersion Include="Microsoft.Data.Sqlite.Core" Version="9.0.3" />
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="9.0.3" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.3" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="9.0.3" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.3" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.3" />
<PackageVersion Include="Microsoft.Extensions.Caching.Abstractions" Version="9.0.3" />
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="9.0.3" />
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="9.0.3" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="9.0.3" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="9.0.3" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="9.0.3" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.3" />
<PackageVersion Include="Microsoft.Extensions.DependencyModel" Version="9.0.3" />
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="9.0.3" />
<PackageVersion Include="Microsoft.Extensions.Http" Version="9.0.3" />
<PackageVersion Include="Microsoft.Extensions.Http.Polly" Version="9.0.3" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="9.0.3" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="9.0.3" />
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="9.0.3" />
<PackageVersion Include="Microsoft.Extensions.Options" Version="9.0.3" />
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="9.0.3" />
<PackageVersion Include="MySql.Data" Version="9.2.0" />
<PackageVersion Include="Npgsql" Version="9.0.3" />
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="9.0.4" />
<PackageVersion Include="Oracle.EntityFrameworkCore" Version="9.23.60" />
<PackageVersion Include="Polly" Version="8.5.2" />
<PackageVersion Include="Pomelo.EntityFrameworkCore.MySql" Version="9.0.0-preview.3.efcore.9.0.0" />
<PackageVersion Include="Refit" Version="8.0.0" />
<PackageVersion Include="Refit.HttpClientFactory" Version="8.0.0" />
<PackageVersion Include="System.Formats.Asn1" Version="9.0.3" />
<PackageVersion Include="System.Text.Json" Version="9.0.3" />
<PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="9.3.0" />
<PackageVersion Include="Microsoft.Extensions.Resilience" Version="9.3.0" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net8.0'">
<!-- <PackageVersion Include="Microsoft.AspNetCore.Authorization" Version="8.0.14" />-->
<!-- <PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly" Version="8.0.14" />-->
<!-- <PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="8.0.14" />-->
<!-- <PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="8.0.14" />-->
<!-- <PackageVersion Include="Microsoft.AspNetCore.DataProtection.Abstractions" Version="8.0.14" />-->
<!-- <PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="8.0.14" />-->
<!-- <PackageVersion Include="Microsoft.Data.Sqlite" Version="8.0.14" />-->
<!-- <PackageVersion Include="Microsoft.Data.Sqlite.Core" Version="8.0.14" />-->
<!-- <PackageVersion Include="Microsoft.EntityFrameworkCore" Version="8.0.14" />-->
<!-- <PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.14" />-->
<!-- <PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="8.0.14" />-->
<!-- <PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.14" />-->
<!-- <PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.14" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.Caching.Abstractions" Version="8.0.0" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="8.0.1" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.Configuration" Version="8.0.0" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="8.0.0" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="8.0.1" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="8.0.1" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.2" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.DependencyModel" Version="8.0.2" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="8.0.1" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.Http" Version="8.0.1" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.Http.Polly" Version="8.0.14" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.Logging" Version="8.0.1" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.3" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="8.0.1" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.Options" Version="8.0.2" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="8.0.0" />-->
<!-- <PackageVersion Include="MySql.Data" Version="9.1.0" />-->
<!-- <PackageVersion Include="Npgsql" Version="8.0.7" />-->
<!-- <PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.11" />-->
<!-- <PackageVersion Include="Oracle.EntityFrameworkCore" Version="8.23.70" />-->
<!-- <PackageVersion Include="Polly" Version="8.5.2" />-->
<!-- <PackageVersion Include="Pomelo.EntityFrameworkCore.MySql" Version="8.0.3" />-->
<!-- <PackageVersion Include="Refit" Version="8.0.0" />-->
<!-- <PackageVersion Include="Refit.HttpClientFactory" Version="8.0.0" />-->
<!-- <PackageVersion Include="System.Formats.Asn1" Version="8.0.2" />-->
<!-- <PackageVersion Include="System.Text.Json" Version="8.0.5" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="8.10.0" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.Resilience" Version="8.10.0" />-->
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net9.0'">
<!-- <PackageVersion Include="Microsoft.AspNetCore.Authorization" Version="9.0.3" />-->
<!-- <PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly" Version="9.0.3" />-->
<!-- <PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="9.0.3" />-->
<!-- <PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="9.0.3" />-->
<!-- <PackageVersion Include="Microsoft.AspNetCore.DataProtection.Abstractions" Version="9.0.3" />-->
<!-- <PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="9.0.3" />-->
<!-- <PackageVersion Include="Microsoft.Data.Sqlite" Version="9.0.3" />-->
<!-- <PackageVersion Include="Microsoft.Data.Sqlite.Core" Version="9.0.3" />-->
<!-- <PackageVersion Include="Microsoft.EntityFrameworkCore" Version="9.0.3" />-->
<!-- <PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.3" />-->
<!-- <PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="9.0.3" />-->
<!-- <PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.3" />-->
<!-- <PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.3" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.Caching.Abstractions" Version="9.0.3" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="9.0.3" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.Configuration" Version="9.0.3" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="9.0.3" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="9.0.3" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="9.0.3" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.3" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.DependencyModel" Version="9.0.3" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="9.0.3" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.Http" Version="9.0.3" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.Http.Polly" Version="9.0.3" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.Logging" Version="9.0.3" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="9.0.3" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="9.0.3" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.Options" Version="9.0.3" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="9.0.3" />-->
<!-- <PackageVersion Include="MySql.Data" Version="9.2.0" />-->
<!-- <PackageVersion Include="Npgsql" Version="9.0.3" />-->
<!-- <PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="9.0.4" />-->
<!-- <PackageVersion Include="Oracle.EntityFrameworkCore" Version="9.23.60" />-->
<!-- <PackageVersion Include="Polly" Version="8.5.2" />-->
<!-- <PackageVersion Include="Pomelo.EntityFrameworkCore.MySql" Version="9.0.0-preview.3.efcore.9.0.0" />-->
<!-- <PackageVersion Include="Refit" Version="8.0.0" />-->
<!-- <PackageVersion Include="Refit.HttpClientFactory" Version="8.0.0" />-->
<!-- <PackageVersion Include="System.Formats.Asn1" Version="9.0.3" />-->
<!-- <PackageVersion Include="System.Text.Json" Version="9.0.3" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="9.3.0" />-->
<!-- <PackageVersion Include="Microsoft.Extensions.Resilience" Version="9.3.0" />-->
</ItemGroup>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
<CentralPackageTransitivePinningEnabled>true</CentralPackageTransitivePinningEnabled>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="Antlr4.Runtime.Standard" Version="4.13.1"/>
<PackageVersion Include="AppAny.Quartz.EntityFrameworkCore.Migrations" Version="0.5.1"/>
<PackageVersion Include="AppAny.Quartz.EntityFrameworkCore.Migrations.MySql" Version="0.5.1"/>
<PackageVersion Include="AppAny.Quartz.EntityFrameworkCore.Migrations.PostgreSQL" Version="0.5.1"/>
<PackageVersion Include="AppAny.Quartz.EntityFrameworkCore.Migrations.SQLite" Version="0.5.1"/>
<PackageVersion Include="AppAny.Quartz.EntityFrameworkCore.Migrations.SqlServer" Version="0.5.1"/>
<PackageVersion Include="AutoMapper" Version="14.0.0" PrivateAssets="All"/>
<PackageVersion Include="Azure.Identity" Version="1.13.2"/>
<PackageVersion Include="Azure.Messaging.ServiceBus" Version="7.18.4"/>
<PackageVersion Include="Azure.ResourceManager" Version="1.13.0"/>
<PackageVersion Include="Azure.ResourceManager.AppContainers" Version="1.3.0"/>
<PackageVersion Include="Azure.ResourceManager.Resources" Version="1.9.0"/>
<PackageVersion Include="Azure.ResourceManager.ServiceBus" Version="1.1.0"/>
<PackageVersion Include="BenchmarkDotNet" Version="0.14.0"/>
<PackageVersion Include="Bogus" Version="35.6.2"/>
<PackageVersion Include="ConfigureAwait.Fody" Version="3.3.2" PrivateAssets="All"/>
<PackageVersion Include="Confluent.Kafka" Version="2.8.0"/>
<PackageVersion Include="Confluent.SchemaRegistry.Serdes.Avro" Version="2.8.0"/>
<PackageVersion Include="coverlet.collector" Version="6.0.4" PrivateAssets="All"/>
<PackageVersion Include="Cronos" Version="0.9.0"/>
<PackageVersion Include="Dapper" Version="2.1.66"/>
<PackageVersion Include="Datadog.Trace.Bundle" Version="3.12.0"/>
<PackageVersion Include="DistributedLock.Core" Version="1.0.8"/>
<PackageVersion Include="DistributedLock.FileSystem" Version="1.0.3"/>
<PackageVersion Include="DistributedLock.Postgres" Version="1.3.0"/>
<PackageVersion Include="DistributedLock.Redis" Version="1.0.3"/>
<PackageVersion Include="Elastic.Clients.Elasticsearch" Version="8.17.1"/>
<PackageVersion Include="Elsa.Studio" Version="3.3.4"/>
<PackageVersion Include="Elsa.Studio.Agents" Version="3.3.4"/>
<PackageVersion Include="Elsa.Studio.Core.BlazorWasm" Version="3.3.4"/>
<PackageVersion Include="Elsa.Studio.Login.BlazorWasm" Version="3.3.4"/>
<PackageVersion Include="FastEndpoints" Version="5.35.0"/>
<PackageVersion Include="FastEndpoints.Security" Version="5.35.0"/>
<PackageVersion Include="FastEndpoints.Swagger" Version="5.35.0"/>
<PackageVersion Include="FluentMigrator" Version="6.2.0"/>
<PackageVersion Include="FluentMigrator.Runner" Version="6.2.0"/>
<PackageVersion Include="FluentStorage" Version="5.6.0"/>
<PackageVersion Include="FluentStorage.Azure.Blobs" Version="5.3.0"/>
<PackageVersion Include="Fluid.Core" Version="2.19.0"/>
<PackageVersion Include="Fody" Version="6.9.2"/>
<PackageVersion Include="GitHubActionsTestLogger" Version="2.4.1"/>
<PackageVersion Include="Google.Protobuf" Version="3.30.0"/>
<PackageVersion Include="Grpc.Net.Client" Version="2.70.0"/>
<PackageVersion Include="Grpc.Tools" Version="2.71.0"/>
<PackageVersion Include="Hangfire" Version="1.8.18"/>
<PackageVersion Include="Hangfire.MemoryStorage" Version="1.8.1.1"/>
<PackageVersion Include="Hangfire.PostgreSql" Version="1.20.10"/>
<PackageVersion Include="Hangfire.Storage.SQLite" Version="0.4.2"/>
<PackageVersion Include="Humanizer.Core" Version="2.14.1"/>
<PackageVersion Include="IronCompress" Version="1.6.3"/>
<PackageVersion Include="JetBrains.Annotations" Version="2024.3.0"/>
<PackageVersion Include="Jint" Version="4.2.1"/>
<PackageVersion Include="LinqKit.Core" Version="1.2.8"/>
<PackageVersion Include="MailKit" Version="4.11.0"/>
<PackageVersion Include="MassTransit" Version="8.3.7"/>
<PackageVersion Include="MassTransit.Azure.ServiceBus.Core" Version="8.3.7"/>
<PackageVersion Include="MassTransit.Extensions.DependencyInjection" Version="7.3.1"/>
<PackageVersion Include="MassTransit.RabbitMQ" Version="8.3.7"/>
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="4.13.0"/>
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite.Design" Version="1.1.6"/>
<PackageVersion Include="Microsoft.Data.SqlClient" Version="6.0.1"/>
<PackageVersion Include="Microsoft.Identity.Client" Version="4.69.1"/>
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.13.0"/>
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="8.0.0"/>
<PackageVersion Include="MongoDB.Driver" Version="3.2.1"/>
<PackageVersion Include="MongoDB.Driver.Core.Extensions.DiagnosticSources" Version="2.0.0"/>
<PackageVersion Include="MongoDB.Driver.Extensions" Version="2.0.2"/>
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3"/>
<PackageVersion Include="NSubstitute" Version="5.3.0"/>
<PackageVersion Include="NuGet.Packaging" Version="6.13.2"/>
<PackageVersion Include="NuGet.Protocol" Version="6.13.2"/>
<PackageVersion Include="Nuke.Components" Version="9.0.4"/>
<PackageVersion Include="Open.Linq.AsyncExtensions" Version="1.2.0"/>
<PackageVersion Include="OpenTelemetry" Version="1.11.2"/>
<PackageVersion Include="OpenTelemetry.AutoInstrumentation" Version="1.11.0"/>
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.11.2"/>
<PackageVersion Include="OpenTelemetry.Exporter.Console" Version="1.11.2"/>
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.11.2"/>
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.11.1"/>
<PackageVersion Include="OpenTelemetry.Instrumentation.Http" Version="1.11.1"/>
<PackageVersion Include="OpenTelemetry.Instrumentation.SqlClient" Version="1.11.0-beta.2"/>
<PackageVersion Include="OpenTelemetry.Instrumentation.StackExchangeRedis" Version="1.11.0-beta.2"/>
<PackageVersion Include="Polly.Extensions.Http" Version="3.0.0"/>
<PackageVersion Include="PolySharp" Version="1.15.0"/>
<PackageVersion Include="Proto.Actor" Version="1.7.0"/>
<PackageVersion Include="Proto.Cluster" Version="1.7.0"/>
<PackageVersion Include="Proto.Cluster.CodeGen" Version="1.7.0"/>
<PackageVersion Include="Proto.Cluster.AzureContainerApps" Version="1.7.0"/>
<PackageVersion Include="Proto.Cluster.Kubernetes" Version="1.7.0"/>
<PackageVersion Include="Proto.Cluster.TestProvider" Version="1.7.0"/>
<PackageVersion Include="Proto.OpenTelemetry" Version="1.7.0"/>
<PackageVersion Include="Proto.Persistence" Version="1.7.0"/>
<PackageVersion Include="Proto.Persistence.Sqlite" Version="1.7.0"/>
<PackageVersion Include="Proto.Persistence.SqlServer" Version="1.7.0"/>
<PackageVersion Include="Proto.Remote" Version="1.7.0"/>
<PackageVersion Include="pythonnet" Version="3.1.0-preview2024-09-06"/>
<PackageVersion Include="Quartz.Extensions.Hosting" Version="3.14.0"/>
<PackageVersion Include="Quartz.Serialization.Json" Version="3.14.0"/>
<PackageVersion Include="Scrutor" Version="6.0.1"/>
<PackageVersion Include="ShortGuid" Version="2.0.1"/>
<PackageVersion Include="StackExchange.Redis" Version="2.8.31"/>
<PackageVersion Include="System.CommandLine" Version="2.0.0-beta4.22272.1"/>
<PackageVersion Include="System.Data.SqlClient" Version="4.9.0"/>
<PackageVersion Include="System.Linq.Async" Version="6.0.1"/>
<PackageVersion Include="System.Linq.Dynamic.Core" Version="1.6.0.2"/>
<PackageVersion Include="System.Net.Http" Version="4.3.4"/>
<PackageVersion Include="System.Text.RegularExpressions" Version="4.3.1"/>
<PackageVersion Include="Testcontainers" Version="4.3.0"/>
<PackageVersion Include="Testcontainers.PostgreSql" Version="4.3.0"/>
<PackageVersion Include="Testcontainers.RabbitMq" Version="4.3.0"/>
<PackageVersion Include="Testcontainers.Redis" Version="4.3.0"/>
<PackageVersion Include="ThrottleDebounce" Version="2.0.0"/>
<PackageVersion Include="WebhooksCore" Version="0.0.1"/>
<PackageVersion Include="xunit" Version="2.9.3"/>
<PackageVersion Include="xunit.abstractions" Version="2.0.3"/>
<PackageVersion Include="xunit.extensibility.core" Version="2.9.3"/>
<PackageVersion Include="xunit.runner.visualstudio" Version="3.0.2"/>
<PackageVersion Include="Yarp.ReverseProxy" Version="2.3.0"/>
<PackageVersion Include="AspNetCore.Authentication.ApiKey" Version="8.0.1"/>
<PackageVersion Include="Microsoft.AspNetCore.Authorization" Version="9.0.3"/>
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly" Version="9.0.3"/>
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="9.0.3"/>
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="9.0.3"/>
<PackageVersion Include="Microsoft.AspNetCore.DataProtection.Abstractions" Version="9.0.3"/>
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="9.0.3"/>
<PackageVersion Include="Microsoft.Data.Sqlite" Version="9.0.3"/>
<PackageVersion Include="Microsoft.Data.Sqlite.Core" Version="9.0.3"/>
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="9.0.3"/>
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.3"/>
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="9.0.3"/>
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.3"/>
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.3"/>
<PackageVersion Include="Microsoft.Extensions.Caching.Abstractions" Version="9.0.3"/>
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="9.0.3"/>
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="9.0.3"/>
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="9.0.3"/>
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="9.0.3"/>
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="9.0.3"/>
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.3"/>
<PackageVersion Include="Microsoft.Extensions.DependencyModel" Version="9.0.3"/>
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="9.0.3"/>
<PackageVersion Include="Microsoft.Extensions.Http" Version="9.0.3"/>
<PackageVersion Include="Microsoft.Extensions.Http.Polly" Version="9.0.3"/>
<PackageVersion Include="Microsoft.Extensions.Logging" Version="9.0.3"/>
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="9.0.3"/>
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="9.0.3"/>
<PackageVersion Include="Microsoft.Extensions.Options" Version="9.0.3"/>
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="9.0.3"/>
<PackageVersion Include="MySql.Data" Version="9.2.0"/>
<PackageVersion Include="Npgsql" Version="9.0.3"/>
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="9.0.4"/>
<PackageVersion Include="Oracle.EntityFrameworkCore" Version="9.23.60"/>
<PackageVersion Include="Polly" Version="8.5.2"/>
<PackageVersion Include="Pomelo.EntityFrameworkCore.MySql" Version="9.0.0-preview.3.efcore.9.0.0"/>
<PackageVersion Include="Refit" Version="8.0.0"/>
<PackageVersion Include="Refit.HttpClientFactory" Version="8.0.0"/>
<PackageVersion Include="System.Formats.Asn1" Version="9.0.3"/>
<PackageVersion Include="System.Text.Json" Version="9.0.3"/>
<PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="9.3.0"/>
<PackageVersion Include="Microsoft.Extensions.Resilience" Version="9.3.0"/>
</ItemGroup>
</Project>

View file

@ -84,6 +84,7 @@ using StackExchange.Redis;
// ReSharper disable RedundantAssignment
const PersistenceProvider persistenceProvider = PersistenceProvider.EntityFrameworkCore;
const bool useDbContextPooling = true;
const bool useHangfire = false;
const bool useQuartz = true;
const bool useMassTransit = true;
@ -236,6 +237,8 @@ services
else
identity.UseEntityFrameworkCore(ef =>
{
ef.UseContextPooling = useDbContextPooling;
if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer)
ef.UseSqlServer(sqlServerConnectionString);
else if (sqlDatabaseProvider == SqlDatabaseProvider.PostgreSql)
@ -286,6 +289,7 @@ services
else
management.UseEntityFrameworkCore(ef =>
{
ef.UseContextPooling = useDbContextPooling;
if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer)
ef.UseSqlServer(sqlServerConnectionString);
else if (sqlDatabaseProvider == SqlDatabaseProvider.PostgreSql)
@ -336,6 +340,7 @@ services
else
runtime.UseEntityFrameworkCore(ef =>
{
ef.UseContextPooling = useDbContextPooling;
if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer)
{
//ef.UseSqlServer(sqlServerConnectionString, new ElsaDbContextOptions);
@ -495,6 +500,7 @@ services
{
alterations.UseEntityFrameworkCore(ef =>
{
ef.UseContextPooling = useDbContextPooling;
if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer)
ef.UseSqlServer(sqlServerConnectionString);
else if (sqlDatabaseProvider == SqlDatabaseProvider.PostgreSql)
@ -634,15 +640,20 @@ services
management.ConfigureOptions(options => configuration.GetSection("Secrets:Management").Bind(options));
if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer)
management.UseEntityFrameworkCore(ef =>
ef.UseSqlServer(sqlServerConnectionString)
);
{
ef.UseContextPooling = useDbContextPooling;
ef.UseSqlServer(sqlServerConnectionString);
});
else if (sqlDatabaseProvider == SqlDatabaseProvider.PostgreSql)
management.UseEntityFrameworkCore(ef =>
ef.UsePostgreSql(postgresConnectionString)
);
{
ef.UseContextPooling = useDbContextPooling;
ef.UsePostgreSql(postgresConnectionString);
});
else
management.UseEntityFrameworkCore(ef =>
{
ef.UseContextPooling = useDbContextPooling;
ef.UseSqlite(sp => sp.GetSqliteConnectionString());
});
})
@ -695,6 +706,7 @@ services
{
management.UseEntityFrameworkCore(ef =>
{
ef.UseContextPooling = useDbContextPooling;
if (sqlDatabaseProvider == SqlDatabaseProvider.Sqlite) ef.UseSqlite(sqliteConnectionString);
if (sqlDatabaseProvider == SqlDatabaseProvider.SqlServer) ef.UseSqlServer(sqlServerConnectionString);
if (sqlDatabaseProvider == SqlDatabaseProvider.PostgreSql) ef.UsePostgreSql(postgresConnectionString);

View file

@ -60,14 +60,6 @@ public abstract class ElsaDbContextBase : DbContext, IElsaDbContextSchema
return await base.SaveChangesAsync(cancellationToken);
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.EnableSensitiveDataLogging();
#if NET9_0_OR_GREATER
optionsBuilder.ConfigureWarnings(w => w.Ignore(RelationalEventId.PendingModelChangesWarning));
#endif
}
/// <inheritdoc />
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
@ -78,7 +70,8 @@ public abstract class ElsaDbContextBase : DbContext, IElsaDbContextSchema
additionalConfigurations?.Invoke(modelBuilder);
var entityTypeHandlers = ServiceProvider.GetServices<IEntityModelCreatingHandler>().ToList();
using var scope = ServiceProvider.CreateScope();
var entityTypeHandlers = scope.ServiceProvider.GetServices<IEntityModelCreatingHandler>().ToList();
foreach (var entityType in modelBuilder.Model.GetEntityTypes().ToList())
{
@ -89,7 +82,8 @@ public abstract class ElsaDbContextBase : DbContext, IElsaDbContextSchema
private async Task OnBeforeSavingAsync(CancellationToken cancellationToken)
{
var handlers = ServiceProvider.GetServices<IEntitySavingHandler>().ToList();
using var scope = ServiceProvider.CreateScope();
var handlers = scope.ServiceProvider.GetServices<IEntitySavingHandler>().ToList();
foreach (var entry in ChangeTracker.Entries().Where(IsModifiedEntity))
{
foreach (var handler in handlers)

View file

@ -4,6 +4,7 @@ using Elsa.Features.Abstractions;
using Elsa.Features.Attributes;
using Elsa.Features.Services;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Diagnostics;
using Microsoft.Extensions.DependencyInjection;
namespace Elsa.EntityFrameworkCore;
@ -24,12 +25,12 @@ public abstract class PersistenceFeatureBase<TFeature, TDbContext> : FeatureBase
/// <summary>
/// Gets or sets a value indicating whether to use context pooling.
/// </summary>
public bool UseContextPooling { get; set; }
public virtual bool UseContextPooling { get; set; }
/// <summary>
/// Gets or sets a value indicating whether to run migrations.
/// </summary>
public bool RunMigrations { get; set; } = true;
public virtual bool RunMigrations { get; set; } = true;
/// <summary>
/// Gets or sets the lifetime of the <see cref="IDbContextFactory{TContext}"/>. Defaults to <see cref="ServiceLifetime.Singleton"/>.
@ -50,13 +51,19 @@ public abstract class PersistenceFeatureBase<TFeature, TDbContext> : FeatureBase
/// <inheritdoc />
public override void Apply()
{
if(DbContextOptionsBuilder == null)
if (DbContextOptionsBuilder == null)
throw new InvalidOperationException("The DbContextOptionsBuilder must be configured.");
Action<IServiceProvider, DbContextOptionsBuilder> setup = (sp, opts) =>
{
opts.ConfigureWarnings(w => w.Ignore(RelationalEventId.PendingModelChangesWarning));
DbContextOptionsBuilder(sp, opts);
};
if (UseContextPooling)
Services.AddPooledDbContextFactory<TDbContext>(DbContextOptionsBuilder);
Services.AddPooledDbContextFactory<TDbContext>(setup);
else
Services.AddDbContextFactory<TDbContext>(DbContextOptionsBuilder, DbContextFactoryLifetime);
Services.AddDbContextFactory<TDbContext>(setup, DbContextFactoryLifetime);
}
protected virtual void ConfigureMigrations()

View file

@ -24,4 +24,26 @@ public class WorkflowManagementPersistenceFeature(IModule module) : PersistenceF
Module.Configure<EFCoreWorkflowInstancePersistenceFeature>(x => x.DbContextOptionsBuilder = value);
}
}
public override bool UseContextPooling
{
get => base.UseContextPooling;
set
{
base.UseContextPooling = value;
Module.Configure<EFCoreWorkflowDefinitionPersistenceFeature>(x => x.UseContextPooling = value);
Module.Configure<EFCoreWorkflowInstancePersistenceFeature>(x => x.UseContextPooling = value);
}
}
public override bool RunMigrations
{
get => base.RunMigrations;
set
{
base.RunMigrations = value;
Module.Configure<EFCoreWorkflowDefinitionPersistenceFeature>(x => x.RunMigrations = value);
Module.Configure<EFCoreWorkflowInstancePersistenceFeature>(x => x.RunMigrations = value);
}
}
}