using MongoDbGenericRepository.DataAccess.Delete; using MongoDbGenericRepository.Models; using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Threading; using System.Threading.Tasks; namespace MongoDbGenericRepository { public abstract partial class BaseMongoRepository : IBaseMongoRepository_Delete { private IMongoDbEraser _mongoDbEraser; /// /// The MongoDbEraser used to delete documents. /// protected virtual IMongoDbEraser MongoDbEraser { get { if (_mongoDbEraser != null) { return _mongoDbEraser; } lock (_initLock) { if (_mongoDbEraser == null) { _mongoDbEraser = new MongoDbEraser(MongoDbContext); } } return _mongoDbEraser; } set { _mongoDbEraser = value; } } #region Delete /// public virtual long DeleteOne(TDocument document) where TDocument : IDocument { return DeleteOne(document, CancellationToken.None); } /// public virtual long DeleteOne(TDocument document, CancellationToken cancellationToken) where TDocument : IDocument { return MongoDbEraser.DeleteOne(document, cancellationToken); } /// public virtual long DeleteOne(Expression> filter) where TDocument : IDocument { return DeleteOne(filter, null, CancellationToken.None); } /// public virtual long DeleteOne(Expression> filter, CancellationToken cancellationToken) where TDocument : IDocument { return DeleteOne(filter, null, cancellationToken); } /// public virtual long DeleteOne(Expression> filter, string partitionKey) where TDocument : IDocument { return DeleteOne(filter, partitionKey, CancellationToken.None); } /// public virtual long DeleteOne(Expression> filter, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument { return MongoDbEraser.DeleteOne(filter, partitionKey, cancellationToken); } /// public virtual async Task DeleteOneAsync(TDocument document) where TDocument : IDocument { return await DeleteOneAsync(document, CancellationToken.None); } /// public virtual async Task DeleteOneAsync(TDocument document, CancellationToken cancellationToken) where TDocument : IDocument { return await MongoDbEraser.DeleteOneAsync(document, cancellationToken); } /// public virtual async Task DeleteOneAsync(Expression> filter) where TDocument : IDocument { return await DeleteOneAsync(filter, null, CancellationToken.None); } /// public virtual async Task DeleteOneAsync(Expression> filter, CancellationToken cancellationToken) where TDocument : IDocument { return await DeleteOneAsync(filter, null, cancellationToken); } /// public virtual async Task DeleteOneAsync(Expression> filter, string partitionKey) where TDocument : IDocument { return await DeleteOneAsync(filter, partitionKey, CancellationToken.None); } /// public virtual async Task DeleteOneAsync(Expression> filter, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument { return await MongoDbEraser.DeleteOneAsync(filter, partitionKey, cancellationToken); } /// public async Task DeleteManyAsync(Expression> filter) where TDocument : IDocument { return await DeleteManyAsync(filter, null, CancellationToken.None); } /// public async Task DeleteManyAsync(Expression> filter, CancellationToken cancellationToken) where TDocument : IDocument { return await DeleteManyAsync(filter, null, cancellationToken); } /// public virtual async Task DeleteManyAsync(Expression> filter, string partitionKey) where TDocument : IDocument { return await DeleteManyAsync(filter, partitionKey, CancellationToken.None); } /// public async Task DeleteManyAsync(Expression> filter, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument { return await MongoDbEraser.DeleteManyAsync(filter, partitionKey, cancellationToken); } /// public virtual async Task DeleteManyAsync(IEnumerable documents) where TDocument : IDocument { return await DeleteManyAsync(documents); } /// public virtual async Task DeleteManyAsync(IEnumerable documents, CancellationToken cancellationToken) where TDocument : IDocument { return await DeleteManyAsync(documents, cancellationToken); } /// public virtual long DeleteMany(IEnumerable documents) where TDocument : IDocument { return DeleteMany(documents); } /// public virtual long DeleteMany(Expression> filter, string partitionKey = null) where TDocument : IDocument { return MongoDbEraser.DeleteMany(filter, partitionKey); } #endregion Delete #region Delete TKey /// public virtual long DeleteOne(TDocument document) where TDocument : IDocument where TKey : IEquatable { return DeleteOne(document, CancellationToken.None); } /// public virtual long DeleteOne(TDocument document, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return MongoDbEraser.DeleteOne(document, cancellationToken); } /// public virtual long DeleteOne(Expression> filter) where TDocument : IDocument where TKey : IEquatable { return DeleteOne(filter, null, CancellationToken.None); } /// public virtual long DeleteOne(Expression> filter, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return DeleteOne(filter, null, cancellationToken); } /// public virtual long DeleteOne(Expression> filter, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return DeleteOne(filter, partitionKey, CancellationToken.None); } /// public virtual long DeleteOne(Expression> filter, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return MongoDbEraser.DeleteOne(filter, partitionKey, cancellationToken); } /// public virtual async Task DeleteOneAsync(TDocument document) where TDocument : IDocument where TKey : IEquatable { return await DeleteOneAsync(document, CancellationToken.None); } /// public virtual async Task DeleteOneAsync(TDocument document, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return await MongoDbEraser.DeleteOneAsync(document, cancellationToken); } /// public virtual async Task DeleteOneAsync(Expression> filter) where TDocument : IDocument where TKey : IEquatable { return await DeleteOneAsync(filter, null, CancellationToken.None); } /// public virtual async Task DeleteOneAsync(Expression> filter, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return await DeleteOneAsync(filter, null, cancellationToken); } /// public virtual async Task DeleteOneAsync(Expression> filter, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return await DeleteOneAsync(filter, partitionKey, CancellationToken.None); } /// public virtual async Task DeleteOneAsync(Expression> filter, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return await MongoDbEraser.DeleteOneAsync(filter, partitionKey, cancellationToken); } /// public virtual async Task DeleteManyAsync(Expression> filter) where TDocument : IDocument where TKey : IEquatable { return await DeleteManyAsync(filter, null, CancellationToken.None); } /// public virtual async Task DeleteManyAsync(Expression> filter, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return await DeleteManyAsync(filter, null, cancellationToken); } /// public virtual async Task DeleteManyAsync(Expression> filter, string partitionKey) where TDocument : IDocument where TKey : IEquatable { return await DeleteManyAsync(filter, partitionKey, CancellationToken.None); } /// public virtual async Task DeleteManyAsync(Expression> filter, string partitionKey, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return await MongoDbEraser.DeleteManyAsync(filter, partitionKey, cancellationToken); } /// public virtual async Task DeleteManyAsync(IEnumerable documents) where TDocument : IDocument where TKey : IEquatable { return await DeleteManyAsync(documents, CancellationToken.None); } /// public virtual async Task DeleteManyAsync(IEnumerable documents, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { return await MongoDbEraser.DeleteManyAsync(documents, cancellationToken); } /// public virtual long DeleteMany(IEnumerable documents) where TDocument : IDocument where TKey : IEquatable { return MongoDbEraser.DeleteMany(documents); } /// public virtual long DeleteMany(Expression> filter, string partitionKey = null) where TDocument : IDocument where TKey : IEquatable { return MongoDbEraser.DeleteMany(filter, partitionKey); } #endregion } }