From 6c0ee78d14462eb9aa8f63ac04ebe1002d8a54a6 Mon Sep 17 00:00:00 2001 From: Oliver Cooper Date: Sun, 31 Jan 2021 01:55:45 +0000 Subject: [PATCH] Update Repository DeleteAsync and DeleteManyAsync methods * Add RepositoryBase.DeleteManyAsync(predicate) * Call DeleteManyAsync(predicate) in concrete DeleteAsync(predicate) implementations when possible Requires this PR for tests to pass: https://github.com/abpframework/abp/pull/7542 --- .../Abp/Domain/Repositories/RepositoryBase.cs | 6 +++++ .../EntityFrameworkCore/EfCoreRepository.cs | 5 +--- .../MemoryDb/MemoryDbRepository.cs | 23 ++++++++----------- .../Repositories/MongoDB/MongoDbRepository.cs | 5 +--- 4 files changed, 18 insertions(+), 21 deletions(-) diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs index 0b32d54d45..d1bf2aa754 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs @@ -85,6 +85,12 @@ namespace Volo.Abp.Domain.Repositories public abstract Task DeleteAsync(Expression> predicate, bool autoSave = false, CancellationToken cancellationToken = default); + public virtual Task DeleteManyAsync( + Expression> predicate, + bool autoSave = false, + CancellationToken cancellationToken = default) + => DeleteAsync(predicate, autoSave, cancellationToken); + protected virtual TQueryable ApplyDataFilters(TQueryable query) where TQueryable : IQueryable { 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 055c9c2de9..d673ff2c28 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 @@ -289,10 +289,7 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore .Where(predicate) .ToListAsync(GetCancellationToken(cancellationToken)); - foreach (var entity in entities) - { - dbSet.Remove(entity); - } + await DeleteManyAsync(entities, autoSave, cancellationToken); if (autoSave) { 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 8ab6753de3..bb7d64bcc1 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 @@ -184,19 +184,6 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb return (await GetQueryableAsync()).Where(predicate).SingleOrDefault(); } - public override async Task DeleteAsync( - Expression> predicate, - bool autoSave = false, - CancellationToken cancellationToken = default) - { - var entities = (await GetQueryableAsync()).Where(predicate).ToList(); - - foreach (var entity in entities) - { - await DeleteAsync(entity, autoSave, cancellationToken); - } - } - public override async Task InsertAsync( TEntity entity, bool autoSave = false, @@ -251,6 +238,16 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb } } + public override async Task DeleteAsync( + Expression> predicate, + bool autoSave = false, + CancellationToken cancellationToken = default) + { + var entities = (await GetQueryableAsync()).Where(predicate).ToList(); + + await DeleteManyAsync(entities, autoSave, cancellationToken); + } + public override async Task> GetListAsync(bool includeDetails = false, CancellationToken cancellationToken = default) { return (await GetQueryableAsync()).ToList(); 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 1495249802..efdd0a8991 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 @@ -463,10 +463,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB .Where(predicate) .ToListAsync(cancellationToken); - foreach (var entity in entities) - { - await DeleteAsync(entity, autoSave, cancellationToken); - } + await DeleteManyAsync(entities, autoSave, cancellationToken); } [Obsolete("Use GetQueryableAsync method.")]