Table of Contents

Class RepositoryCollectionBase<TEntity, TKey>

Namespace
Tharga.MongoDB
Assembly
Tharga.MongoDB.dll
public abstract class RepositoryCollectionBase<TEntity, TKey> : RepositoryCollectionBase, IRepositoryCollection<TEntity, TKey>, IReadOnlyRepositoryCollection<TEntity, TKey>, IRepositoryCollection, IReadOnlyRepositoryCollection where TEntity : EntityBase<TKey>

Type Parameters

TEntity
TKey
Inheritance
RepositoryCollectionBase<TEntity, TKey>
Implements
IRepositoryCollection<TEntity, TKey>
Derived
Inherited Members

Constructors

RepositoryCollectionBase(IMongoDbServiceFactory, ILogger, DatabaseContext)

protected RepositoryCollectionBase(IMongoDbServiceFactory mongoDbServiceFactory, ILogger logger, DatabaseContext databaseContext = null)

Parameters

mongoDbServiceFactory IMongoDbServiceFactory
logger ILogger
databaseContext DatabaseContext

Fields

_databaseContext

protected readonly DatabaseContext _databaseContext

Field Value

DatabaseContext

_logger

protected readonly ILogger _logger

Field Value

ILogger

_mongoDbService

protected readonly IMongoDbService _mongoDbService

Field Value

IMongoDbService

_mongoDbServiceFactory

protected readonly IMongoDbServiceFactory _mongoDbServiceFactory

Field Value

IMongoDbServiceFactory

Properties

AutoClean

public virtual bool AutoClean { get; }

Property Value

bool

CleanOnStartup

public virtual bool CleanOnStartup { get; }

Property Value

bool

CollectionName

public override string CollectionName { get; }

Property Value

string

ConfigurationName

public override string ConfigurationName { get; }

Property Value

string

CoreIndices

public virtual IEnumerable<CreateIndexModel<TEntity>> CoreIndices { get; }

Property Value

IEnumerable<CreateIndexModel<TEntity>>

CreateCollectionStrategy

public virtual CreateStrategy CreateCollectionStrategy { get; }

Property Value

CreateStrategy

DatabasePart

public virtual string DatabasePart { get; }

Property Value

string

FetchSize

public virtual int? FetchSize { get; }

Property Value

int?

Indices

public virtual IEnumerable<CreateIndexModel<TEntity>> Indices { get; }

Property Value

IEnumerable<CreateIndexModel<TEntity>>

ProtectedCollectionName

protected string ProtectedCollectionName { get; }

Property Value

string

Types

public virtual IEnumerable<Type> Types { get; }

Property Value

IEnumerable<Type>

Methods

AddAsync(TEntity, IClientSessionHandle)

public abstract Task AddAsync(TEntity entity, IClientSessionHandle session = null)

Parameters

entity TEntity
session IClientSessionHandle

Returns

Task

AddManyAsync(IEnumerable<TEntity>, IClientSessionHandle)

public abstract Task AddManyAsync(IEnumerable<TEntity> entities, IClientSessionHandle session = null)

Parameters

entities IEnumerable<TEntity>
session IClientSessionHandle

Returns

Task

AvgAsync(Expression<Func<TEntity, decimal>>, Expression<Func<TEntity, bool>>, CancellationToken)

Computes the average of a numeric field server-side.

public abstract Task<decimal> AvgAsync(Expression<Func<TEntity, decimal>> field, Expression<Func<TEntity, bool>> predicate = null, CancellationToken cancellationToken = default)

Parameters

field Expression<Func<TEntity, decimal>>
predicate Expression<Func<TEntity, bool>>
cancellationToken CancellationToken

Returns

Task<decimal>

CountAsync(FilterDefinition<TEntity>, CancellationToken)

public abstract Task<long> CountAsync(FilterDefinition<TEntity> filter, CancellationToken cancellationToken = default)

Parameters

filter FilterDefinition<TEntity>
cancellationToken CancellationToken

Returns

Task<long>

CountAsync(Expression<Func<TEntity, bool>>, CancellationToken)

public abstract Task<long> CountAsync(Expression<Func<TEntity, bool>> predicate, CancellationToken cancellationToken = default)

Parameters

predicate Expression<Func<TEntity, bool>>
cancellationToken CancellationToken

Returns

Task<long>

DeleteOneAsync(TKey, IClientSessionHandle)

public abstract Task<TEntity> DeleteOneAsync(TKey id, IClientSessionHandle session = null)

Parameters

id TKey
session IClientSessionHandle

Returns

Task<TEntity>

DropCollectionAsync()

public abstract Task DropCollectionAsync()

Returns

Task

EstimatedCountAsync(CancellationToken)

Returns an estimated count of documents in the collection using metadata. This is very fast but may not be perfectly accurate.

public abstract Task<long> EstimatedCountAsync(CancellationToken cancellationToken = default)

Parameters

cancellationToken CancellationToken

Returns

Task<long>

ExecuteAsync<T>(Func<IMongoCollection<TEntity>, CancellationToken, Task<T>>, Operation, CancellationToken)

public abstract Task<T> ExecuteAsync<T>(Func<IMongoCollection<TEntity>, CancellationToken, Task<T>> execute, Operation operation, CancellationToken cancellationToken)

Parameters

execute Func<IMongoCollection<TEntity>, CancellationToken, Task<T>>
operation Operation
cancellationToken CancellationToken

Returns

Task<T>

Type Parameters

T

ExecuteAsync<T>(Func<IMongoCollection<TEntity>, Task<T>>, Operation)

public abstract Task<T> ExecuteAsync<T>(Func<IMongoCollection<TEntity>, Task<T>> execute, Operation operation)

Parameters

execute Func<IMongoCollection<TEntity>, Task<T>>
operation Operation

Returns

Task<T>

Type Parameters

T

ExecuteManyAsync<T>(Func<IMongoCollection<TEntity>, CancellationToken, Task<IAsyncCursor<T>>>, CancellationToken)

public abstract IAsyncEnumerable<T> ExecuteManyAsync<T>(Func<IMongoCollection<TEntity>, CancellationToken, Task<IAsyncCursor<T>>> queryFactory, CancellationToken cancellationToken = default)

Parameters

queryFactory Func<IMongoCollection<TEntity>, CancellationToken, Task<IAsyncCursor<T>>>
cancellationToken CancellationToken

Returns

IAsyncEnumerable<T>

Type Parameters

T

GetAsync(FilterDefinition<TEntity>, Options<TEntity>, CancellationToken)

public abstract IAsyncEnumerable<TEntity> GetAsync(FilterDefinition<TEntity> filter, Options<TEntity> options = null, CancellationToken cancellationToken = default)

Parameters

filter FilterDefinition<TEntity>
options Options<TEntity>
cancellationToken CancellationToken

Returns

IAsyncEnumerable<TEntity>

GetAsync(Expression<Func<TEntity, bool>>, Options<TEntity>, CancellationToken)

public abstract IAsyncEnumerable<TEntity> GetAsync(Expression<Func<TEntity, bool>> predicate = null, Options<TEntity> options = null, CancellationToken cancellationToken = default)

Parameters

predicate Expression<Func<TEntity, bool>>
options Options<TEntity>
cancellationToken CancellationToken

Returns

IAsyncEnumerable<TEntity>

GetDirtyAsync()

Entities that needs cleaning.

public abstract IAsyncEnumerable<TEntity> GetDirtyAsync()

Returns

IAsyncEnumerable<TEntity>

GetFailedIndices()

Indices that have failed to be created or dropped on this collection within the current process, with the most recent error message captured for each. Empty when no failures have been recorded. In-process scope; cross-process persistence is a planned follow-up.

public abstract IReadOnlyList<IndexFailure> GetFailedIndices()

Returns

IReadOnlyList<IndexFailure>

GetManyAsync(FilterDefinition<TEntity>, Options<TEntity>, CancellationToken)

public abstract Task<Result<TEntity, TKey>> GetManyAsync(FilterDefinition<TEntity> filter, Options<TEntity> options = null, CancellationToken cancellationToken = default)

Parameters

filter FilterDefinition<TEntity>
options Options<TEntity>
cancellationToken CancellationToken

Returns

Task<Result<TEntity, TKey>>

GetManyAsync(Expression<Func<TEntity, bool>>, Options<TEntity>, CancellationToken)

public abstract Task<Result<TEntity, TKey>> GetManyAsync(Expression<Func<TEntity, bool>> predicate = null, Options<TEntity> options = null, CancellationToken cancellationToken = default)

Parameters

predicate Expression<Func<TEntity, bool>>
options Options<TEntity>
cancellationToken CancellationToken

Returns

Task<Result<TEntity, TKey>>

GetManyProjectionAsync<T>(FilterDefinition<TEntity>, Options<TEntity>, CancellationToken)

public abstract Task<Result<T>> GetManyProjectionAsync<T>(FilterDefinition<TEntity> filter, Options<TEntity> options = null, CancellationToken cancellationToken = default)

Parameters

filter FilterDefinition<TEntity>
options Options<TEntity>
cancellationToken CancellationToken

Returns

Task<Result<T>>

Type Parameters

T

GetManyProjectionAsync<T>(Expression<Func<TEntity, bool>>, Options<TEntity>, CancellationToken)

public abstract Task<Result<T>> GetManyProjectionAsync<T>(Expression<Func<TEntity, bool>> predicate = null, Options<TEntity> options = null, CancellationToken cancellationToken = default)

Parameters

predicate Expression<Func<TEntity, bool>>
options Options<TEntity>
cancellationToken CancellationToken

Returns

Task<Result<T>>

Type Parameters

T

GetOneAsync(FilterDefinition<TEntity>, OneOption<TEntity>, CancellationToken)

public abstract Task<TEntity> GetOneAsync(FilterDefinition<TEntity> filter, OneOption<TEntity> options = null, CancellationToken cancellationToken = default)

Parameters

filter FilterDefinition<TEntity>
options OneOption<TEntity>
cancellationToken CancellationToken

Returns

Task<TEntity>

GetOneAsync(Expression<Func<TEntity, bool>>, OneOption<TEntity>, CancellationToken)

public abstract Task<TEntity> GetOneAsync(Expression<Func<TEntity, bool>> predicate, OneOption<TEntity> options = null, CancellationToken cancellationToken = default)

Parameters

predicate Expression<Func<TEntity, bool>>
options OneOption<TEntity>
cancellationToken CancellationToken

Returns

Task<TEntity>

GetOneAsync(TKey, CancellationToken)

public abstract Task<TEntity> GetOneAsync(TKey id, CancellationToken cancellationToken = default)

Parameters

id TKey
cancellationToken CancellationToken

Returns

Task<TEntity>

GetPageAsync(int, PagePosition, Expression<Func<TEntity, bool>>, Expression<Func<TEntity, object>>, bool, CancellationToken)

Keyset (seek-based) pagination. Cost is O(log N) per page regardless of how deep the page sits — no skip penalty on deep pages or "jump to last." Single-column sort only; total count is intentionally not part of the result and should be obtained via CountAsync(predicate) separately.

public abstract Task<CursorPage<TEntity>> GetPageAsync(int pageSize, PagePosition position, Expression<Func<TEntity, bool>> predicate = null, Expression<Func<TEntity, object>> sortBy = null, bool ascending = true, CancellationToken cancellationToken = default)

Parameters

pageSize int
position PagePosition
predicate Expression<Func<TEntity, bool>>
sortBy Expression<Func<TEntity, object>>
ascending bool
cancellationToken CancellationToken

Returns

Task<CursorPage<TEntity>>

GetPageProjectionAsync<T>(int, PagePosition, Expression<Func<TEntity, T>>, Expression<Func<TEntity, bool>>, Expression<Func<TEntity, object>>, bool, CancellationToken)

public abstract Task<CursorPage<T>> GetPageProjectionAsync<T>(int pageSize, PagePosition position, Expression<Func<TEntity, T>> projection, Expression<Func<TEntity, bool>> predicate = null, Expression<Func<TEntity, object>> sortBy = null, bool ascending = true, CancellationToken cancellationToken = default)

Parameters

pageSize int
position PagePosition
projection Expression<Func<TEntity, T>>
predicate Expression<Func<TEntity, bool>>
sortBy Expression<Func<TEntity, object>>
ascending bool
cancellationToken CancellationToken

Returns

Task<CursorPage<T>>

Type Parameters

T

GetProjectionAsync<T>(FilterDefinition<TEntity>, Options<TEntity>, CancellationToken)

public abstract IAsyncEnumerable<T> GetProjectionAsync<T>(FilterDefinition<TEntity> filter, Options<TEntity> options = null, CancellationToken cancellationToken = default)

Parameters

filter FilterDefinition<TEntity>
options Options<TEntity>
cancellationToken CancellationToken

Returns

IAsyncEnumerable<T>

Type Parameters

T

GetProjectionAsync<T>(Expression<Func<TEntity, bool>>, Options<TEntity>, CancellationToken)

public abstract IAsyncEnumerable<T> GetProjectionAsync<T>(Expression<Func<TEntity, bool>> predicate = null, Options<TEntity> options = null, CancellationToken cancellationToken = default)

Parameters

predicate Expression<Func<TEntity, bool>>
options Options<TEntity>
cancellationToken CancellationToken

Returns

IAsyncEnumerable<T>

Type Parameters

T

GetSizeAsync(CancellationToken)

public abstract Task<long> GetSizeAsync(CancellationToken cancellationToken = default)

Parameters

cancellationToken CancellationToken

Returns

Task<long>

InitAsync(IMongoCollection<TEntity>)

protected virtual Task InitAsync(IMongoCollection<TEntity> collection)

Parameters

collection IMongoCollection<TEntity>

Returns

Task

MaxAsync<TField>(Expression<Func<TEntity, TField>>, Expression<Func<TEntity, bool>>, CancellationToken)

Computes the maximum value of a field server-side.

public abstract Task<TField> MaxAsync<TField>(Expression<Func<TEntity, TField>> field, Expression<Func<TEntity, bool>> predicate = null, CancellationToken cancellationToken = default)

Parameters

field Expression<Func<TEntity, TField>>
predicate Expression<Func<TEntity, bool>>
cancellationToken CancellationToken

Returns

Task<TField>

Type Parameters

TField

MinAsync<TField>(Expression<Func<TEntity, TField>>, Expression<Func<TEntity, bool>>, CancellationToken)

Computes the minimum value of a field server-side.

public abstract Task<TField> MinAsync<TField>(Expression<Func<TEntity, TField>> field, Expression<Func<TEntity, bool>> predicate = null, CancellationToken cancellationToken = default)

Parameters

field Expression<Func<TEntity, TField>>
predicate Expression<Func<TEntity, bool>>
cancellationToken CancellationToken

Returns

Task<TField>

Type Parameters

TField

SumAsync(Expression<Func<TEntity, decimal>>, Expression<Func<TEntity, bool>>, CancellationToken)

Computes the sum of a numeric field server-side.

public abstract Task<decimal> SumAsync(Expression<Func<TEntity, decimal>> field, Expression<Func<TEntity, bool>> predicate = null, CancellationToken cancellationToken = default)

Parameters

field Expression<Func<TEntity, decimal>>
predicate Expression<Func<TEntity, bool>>
cancellationToken CancellationToken

Returns

Task<decimal>

TryAddAsync(TEntity, IClientSessionHandle)

public abstract Task<bool> TryAddAsync(TEntity entity, IClientSessionHandle session = null)

Parameters

entity TEntity
session IClientSessionHandle

Returns

Task<bool>