diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IBasicRepository.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IBasicRepository.cs
index 06a222cda7..331001fcb1 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IBasicRepository.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IBasicRepository.cs
@@ -54,8 +54,8 @@ namespace Volo.Abp.Domain.Repositories
/// This is useful for ORMs / database APIs those only save changes with an explicit method call, but you need to immediately save changes to the database.
/// A to observe while waiting for the task to complete.
/// Awaitable .
-
Task UpdateManyAsync([NotNull] IEnumerable entities, bool autoSave = false, CancellationToken cancellationToken = default);
+
///
/// Deletes an entity.
///
diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs
index 437e32ad40..ca885bd4fb 100644
--- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs
+++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs
@@ -344,17 +344,11 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore
await DeleteAsync(entity, autoSave, cancellationToken);
}
- public async Task DeleteManyAsync([NotNull] IEnumerable ids, bool autoSave = false, CancellationToken cancellationToken = default)
+ public async virtual Task DeleteManyAsync([NotNull] IEnumerable ids, bool autoSave = false, CancellationToken cancellationToken = default)
{
- foreach (var id in ids)
- {
- await DeleteAsync(id, cancellationToken: cancellationToken);
- }
+ var entities = await DbSet.Where(x => ids.Contains(x.Id)).ToListAsync();
- if (autoSave)
- {
- await SaveChangesAsync(cancellationToken);
- }
+ await DeleteManyAsync(entities, autoSave, cancellationToken);
}
}
}
diff --git a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs
index 63203d8b0f..7c67e254ee 100644
--- a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs
+++ b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs
@@ -313,15 +313,8 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb
public virtual async Task DeleteManyAsync([NotNull] IEnumerable ids, bool autoSave = false, CancellationToken cancellationToken = default)
{
- foreach (var id in ids)
- {
- await DeleteAsync(id, cancellationToken: cancellationToken);
- }
-
- if (autoSave)
- {
- await SaveChangesAsync(cancellationToken);
- }
+ var entities = await AsyncExecuter.ToListAsync(GetQueryable().Where(x => ids.Contains(x.Id)));
+ DeleteManyAsync(entities, autoSave, cancellationToken);
}
}
}
diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbBulkOperationProvider.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbBulkOperationProvider.cs
index 367a70bb86..1436a7bab7 100644
--- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbBulkOperationProvider.cs
+++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbBulkOperationProvider.cs
@@ -16,7 +16,6 @@ namespace Volo.Abp.MongoDB.Volo.Abp.Domain.Repositories.MongoDB
)
where TEntity : class, IEntity;
-
Task UpdateManyAsync(
IMongoDbRepository repository,
IEnumerable entities,
@@ -25,7 +24,6 @@ namespace Volo.Abp.MongoDB.Volo.Abp.Domain.Repositories.MongoDB
)
where TEntity : class, IEntity;
-
Task DeleteManyAsync(
IMongoDbRepository repository,
IEnumerable entities,
diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbRepositoryFilterer.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbRepositoryFilterer.cs
index 5a96a29022..dfabd8dde3 100644
--- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbRepositoryFilterer.cs
+++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbRepositoryFilterer.cs
@@ -16,7 +16,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB
FilterDefinition CreateEntityFilter(TEntity entity, bool withConcurrencyStamp = false, string concurrencyStamp = null);
///
- /// Creates 'In' filter for mongoDb.
+ /// Creates filter for given entities.
///
///
/// Visit https://docs.mongodb.com/manual/reference/operator/query/in/ to get more information about 'in' operator.
@@ -27,7 +27,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB
FilterDefinition CreateEntitiesFilter(IEnumerable entities, bool applyFilters = false);
///
- /// Creates 'In' filter for mongoDb.
+ /// Creates filter for given ids.
///
///
/// Visit https://docs.mongodb.com/manual/reference/operator/query/in/ to get more information about 'in' operator.
diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs
index 7c910d350f..f24c553509 100644
--- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs
+++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs
@@ -195,27 +195,25 @@ namespace Volo.Abp.Domain.Repositories.MongoDB
var entitiesCount = entities.Count();
BulkWriteResult result;
+ List> replaceRequests = new List>();
+ foreach (var entity in entities)
+ {
+ replaceRequests.Add(new ReplaceOneModel(CreateEntityFilter(entity), entity));
+ }
+
if (SessionHandle != null)
{
- result = await Collection.BulkWriteAsync(SessionHandle, GetReplaceRequests());
+ result = await Collection.BulkWriteAsync(SessionHandle, replaceRequests);
}
else
{
- result = await Collection.BulkWriteAsync(GetReplaceRequests());
+ result = await Collection.BulkWriteAsync(replaceRequests);
}
if (result.MatchedCount < entitiesCount)
{
ThrowOptimisticConcurrencyException();
}
-
- IEnumerable> GetReplaceRequests()
- {
- foreach (var entity in entities)
- {
- yield return new ReplaceOneModel(CreateEntityFilter(entity), entity);
- }
- }
}
public async override Task DeleteAsync(