diff --git a/Directory.Packages.props b/Directory.Packages.props index 302aca426..29df7d6dd 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -95,14 +95,15 @@ - - - - - + + + + + + @@ -134,6 +135,7 @@ + @@ -160,7 +162,7 @@ - + - + \ No newline at end of file diff --git a/src/bundles/Elsa.Server.Web/Program.cs b/src/bundles/Elsa.Server.Web/Program.cs index cf1b19952..b0d4b8c7f 100644 --- a/src/bundles/Elsa.Server.Web/Program.cs +++ b/src/bundles/Elsa.Server.Web/Program.cs @@ -25,7 +25,7 @@ using Proto.Persistence.SqlServer; const bool useMongoDb = false; const bool useSqlServer = false; -const bool useDapper = true; +const bool useDapper = false; const bool useProtoActor = false; const bool useHangfire = false; const bool useQuartz = true; diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/Elsa.EntityFrameworkCore.Common.csproj b/src/modules/Elsa.EntityFrameworkCore.Common/Elsa.EntityFrameworkCore.Common.csproj index 6c01211d5..1cd34ddc1 100644 --- a/src/modules/Elsa.EntityFrameworkCore.Common/Elsa.EntityFrameworkCore.Common.csproj +++ b/src/modules/Elsa.EntityFrameworkCore.Common/Elsa.EntityFrameworkCore.Common.csproj @@ -8,6 +8,7 @@ + diff --git a/src/modules/Elsa.EntityFrameworkCore.Common/Extensions/QueryableExtensions.cs b/src/modules/Elsa.EntityFrameworkCore.Common/Extensions/QueryableExtensions.cs index 28be0c676..c0b815617 100644 --- a/src/modules/Elsa.EntityFrameworkCore.Common/Extensions/QueryableExtensions.cs +++ b/src/modules/Elsa.EntityFrameworkCore.Common/Extensions/QueryableExtensions.cs @@ -1,4 +1,5 @@ using System.Linq.Expressions; +using EFCore.BulkExtensions; using Elsa.Common.Models; using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; @@ -17,24 +18,10 @@ public static class QueryableExtensions /// public static async Task BulkUpsertAsync(this TDbContext dbContext, IList entities, Expression> keySelector, CancellationToken cancellationToken = default) where TDbContext : DbContext where TEntity : class { - var set = dbContext.Set(); - var compiledKeySelector = keySelector.Compile(); - var containsLambda = entities.Any() ? keySelector.BuildContainsExpression(entities) : default; - var existingEntitiesQuery = set.AsNoTracking(); - - if (containsLambda != null) - existingEntitiesQuery = existingEntitiesQuery.Where(containsLambda); - - var existingEntities = await existingEntitiesQuery.ToListAsync(cancellationToken); - var entitiesToUpdate = entities.IntersectBy(existingEntities.Select(compiledKeySelector), compiledKeySelector).ToList(); - var entitiesToInsert = entities.Except(entitiesToUpdate).ToList(); - - if (entitiesToUpdate.Any()) - set.UpdateRange(entitiesToUpdate); - if (entitiesToInsert.Any()) - await set.AddRangeAsync(entitiesToInsert, cancellationToken); - - await dbContext.SaveChangesAsync(cancellationToken); + await dbContext.BulkInsertOrUpdateAsync(entities, new BulkConfig + { + EnableShadowProperties = true + }, cancellationToken: cancellationToken); } ///