diff --git a/.github/workflows/packages.yml b/.github/workflows/packages.yml
index 43e153627..853e39fd2 100644
--- a/.github/workflows/packages.yml
+++ b/.github/workflows/packages.yml
@@ -11,6 +11,7 @@ on:
- 'enh/*'
- 'rc/*'
- 'develop/*'
+ - 'codex/*'
release:
types: [ prereleased, published ]
env:
diff --git a/Directory.Build.props b/Directory.Build.props
index 79b1b1640..52dede999 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -36,4 +36,7 @@
$(NoWarn);IL2026;IL2046;IL2057;IL2067;IL2070;IL2072;IL2075;IL2087;IL2091
+
+ 3.5.0-preview.1019
+
\ No newline at end of file
diff --git a/Directory.Packages.props b/Directory.Packages.props
index 840b7cf12..9b10f2b7d 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -30,11 +30,11 @@
-
-
-
-
+
+
+
+
diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/ElsaDbContextBase.cs b/src/modules/Elsa.EntityFrameworkCore.Common/ElsaDbContextBase.cs
index 2a22f2a7d..a1f9dcb35 100644
--- a/src/modules/Elsa.EntityFrameworkCore.Common/ElsaDbContextBase.cs
+++ b/src/modules/Elsa.EntityFrameworkCore.Common/ElsaDbContextBase.cs
@@ -19,7 +19,7 @@ public abstract class ElsaDbContextBase : DbContext, IElsaDbContextSchema
};
protected IServiceProvider ServiceProvider { get; }
- private readonly ElsaDbContextOptions? _elsaDbContextOptions;
+ private readonly ElsaDbContextOptions? elsaDbContextOptions;
public string? TenantId { get; set; }
///
@@ -41,10 +41,10 @@ public abstract class ElsaDbContextBase : DbContext, IElsaDbContextSchema
protected ElsaDbContextBase(DbContextOptions options, IServiceProvider serviceProvider) : base(options)
{
ServiceProvider = serviceProvider;
- _elsaDbContextOptions = options.FindExtension()?.Options;
-
+ elsaDbContextOptions = options.FindExtension()?.Options;
+
// ReSharper disable once VirtualMemberCallInConstructor
- Schema = !string.IsNullOrWhiteSpace(_elsaDbContextOptions?.SchemaName) ? _elsaDbContextOptions.SchemaName : ElsaSchema;
+ Schema = !string.IsNullOrWhiteSpace(elsaDbContextOptions?.SchemaName) ? elsaDbContextOptions.SchemaName : ElsaSchema;
var tenantAccessor = serviceProvider.GetService();
var tenantId = tenantAccessor?.Tenant?.Id;
@@ -63,11 +63,11 @@ public abstract class ElsaDbContextBase : DbContext, IElsaDbContextSchema
///
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
- if (!string.IsNullOrWhiteSpace(Schema))
+ if (!string.IsNullOrWhiteSpace(Schema))
modelBuilder.HasDefaultSchema(Schema);
- var additionalConfigurations = _elsaDbContextOptions?.GetModelConfigurations(this);
-
+ var additionalConfigurations = elsaDbContextOptions?.GetModelConfigurations(this);
+
additionalConfigurations?.Invoke(modelBuilder);
using var scope = ServiceProvider.CreateScope();
@@ -75,7 +75,7 @@ public abstract class ElsaDbContextBase : DbContext, IElsaDbContextSchema
foreach (var entityType in modelBuilder.Model.GetEntityTypes().ToList())
{
- foreach (var handler in entityTypeHandlers)
+ foreach (var handler in entityTypeHandlers)
handler.Handle(this, modelBuilder, entityType);
}
}
diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/EntityHandlers/SetTenantIdFilter.cs b/src/modules/Elsa.EntityFrameworkCore.Common/EntityHandlers/SetTenantIdFilter.cs
index 0e5bb9d9d..f4522d7d4 100644
--- a/src/modules/Elsa.EntityFrameworkCore.Common/EntityHandlers/SetTenantIdFilter.cs
+++ b/src/modules/Elsa.EntityFrameworkCore.Common/EntityHandlers/SetTenantIdFilter.cs
@@ -1,9 +1,7 @@
using System.Linq.Expressions;
using Elsa.Common.Entities;
-using Elsa.Extensions;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Query;
namespace Elsa.EntityFrameworkCore.EntityHandlers;
@@ -15,15 +13,32 @@ public class SetTenantIdFilter : IEntityModelCreatingHandler
///
public void Handle(ElsaDbContextBase dbContext, ModelBuilder modelBuilder, IMutableEntityType entityType)
{
- if (!entityType.ClrType.IsAssignableTo(typeof(Entity)))
+ if (!typeof(Entity).IsAssignableFrom(entityType.ClrType))
return;
- var tenantId = dbContext.TenantId.NullIfEmpty();
- var parameter = Expression.Parameter(entityType.ClrType);
- Expression> filterExpr = entity => entity.TenantId == tenantId;
- var body = ReplacingExpressionVisitor.Replace(filterExpr.Parameters[0], parameter, filterExpr.Body);
- var lambdaExpression = Expression.Lambda(body, parameter);
+ modelBuilder
+ .Entity(entityType.ClrType)
+ .HasQueryFilter(CreateTenantFilterExpression(dbContext, entityType.ClrType));
+ }
- entityType.SetQueryFilter(lambdaExpression);
+ private LambdaExpression CreateTenantFilterExpression(ElsaDbContextBase dbContext, Type clrType)
+ {
+ var parameter = Expression.Parameter(clrType, "e");
+
+ // e => EF.Property(e, "TenantId") == this.TenantId
+ var tenantIdProperty = Expression.Call(
+ typeof(EF),
+ nameof(EF.Property),
+ [typeof(string)],
+ parameter,
+ Expression.Constant("TenantId"));
+
+ var tenantIdOnContext = Expression.Property(
+ Expression.Constant(dbContext),
+ nameof(ElsaDbContextBase.TenantId));
+
+ var body = Expression.Equal(tenantIdProperty, tenantIdOnContext);
+
+ return Expression.Lambda(body, parameter);
}
}
\ No newline at end of file
diff --git a/src/modules/Elsa.Http/Activities/HttpEndpoint.cs b/src/modules/Elsa.Http/Activities/HttpEndpoint.cs
index b38822b42..6db32f823 100644
--- a/src/modules/Elsa.Http/Activities/HttpEndpoint.cs
+++ b/src/modules/Elsa.Http/Activities/HttpEndpoint.cs
@@ -163,7 +163,7 @@ public class HttpEndpoint : Trigger
{
var path = Path.Get(context);
var methods = SupportedMethods.GetOrDefault(context) ?? new List { HttpMethods.Get };
- context.WaitForHttpRequest(path, methods, OnResumeAsync);
+ await context.WaitForHttpRequestAsync(path, methods, OnResumeAsync);
}
private async ValueTask OnResumeAsync(ActivityExecutionContext context)
@@ -497,4 +497,4 @@ public class HttpEndpoint : Trigger
return routeData;
}
-}
\ No newline at end of file
+}
diff --git a/src/modules/Elsa.Http/Activities/HttpEndpointBase.cs b/src/modules/Elsa.Http/Activities/HttpEndpointBase.cs
index e3e3666fb..9257a73c1 100644
--- a/src/modules/Elsa.Http/Activities/HttpEndpointBase.cs
+++ b/src/modules/Elsa.Http/Activities/HttpEndpointBase.cs
@@ -20,10 +20,10 @@ public abstract class HttpEndpointBase : Trigger
{
}
- protected override void Execute(ActivityExecutionContext context)
+ protected override async ValueTask ExecuteAsync(ActivityExecutionContext context)
{
var options = GetOptions();
- context.WaitForHttpRequest(options, HttpRequestReceivedAsync);
+ await context.WaitForHttpRequestAsync(options, HttpRequestReceivedAsync);
}
protected override IEnumerable