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
}
}