Table of Contents

Interface ILockableRepositoryCollection<TEntity, TKey>

Namespace
Tharga.MongoDB.Lockable
Assembly
Tharga.MongoDB.dll
public interface ILockableRepositoryCollection<TEntity, TKey> : IRepositoryCollection<TEntity, TKey>, IReadOnlyRepositoryCollection<TEntity, TKey>, IRepositoryCollection, IReadOnlyRepositoryCollection where TEntity : LockableEntityBase<TKey>

Type Parameters

TEntity
TKey
Inherited Members

Properties

ExceptionFilter

Expression<Func<TEntity, bool>> ExceptionFilter { get; }

Property Value

Expression<Func<TEntity, bool>>

LockedFilter

Expression<Func<TEntity, bool>> LockedFilter { get; }

Property Value

Expression<Func<TEntity, bool>>

LockedOrExceptionFilter

Expression<Func<TEntity, bool>> LockedOrExceptionFilter { get; }

Property Value

Expression<Func<TEntity, bool>>

UnlockedOrExpiredFilter

Expression<Func<TEntity, bool>> UnlockedOrExpiredFilter { get; }

Property Value

Expression<Func<TEntity, bool>>

Methods

DeleteManyAsync(DeleteMode, Expression<Func<TEntity, bool>>)

Task<long> DeleteManyAsync(DeleteMode deleteMode, Expression<Func<TEntity, bool>> predicate = null)

Parameters

deleteMode DeleteMode
predicate Expression<Func<TEntity, bool>>

Returns

Task<long>

DeleteManyUnlockedAsync(FilterDefinition<TEntity>)

Task<long> DeleteManyUnlockedAsync(FilterDefinition<TEntity> filter)

Parameters

filter FilterDefinition<TEntity>

Returns

Task<long>

DeleteManyUnlockedAsync(Expression<Func<TEntity, bool>>)

Task<long> DeleteManyUnlockedAsync(Expression<Func<TEntity, bool>> predicate = null)

Parameters

predicate Expression<Func<TEntity, bool>>

Returns

Task<long>

DeleteOneUnlockedAsync(FilterDefinition<TEntity>, OneOption<TEntity>)

Task<TEntity> DeleteOneUnlockedAsync(FilterDefinition<TEntity> filter, OneOption<TEntity> options = null)

Parameters

filter FilterDefinition<TEntity>
options OneOption<TEntity>

Returns

Task<TEntity>

DeleteOneUnlockedAsync(Expression<Func<TEntity, bool>>, OneOption<TEntity>)

Task<TEntity> DeleteOneUnlockedAsync(Expression<Func<TEntity, bool>> predicate, OneOption<TEntity> options = null)

Parameters

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

Returns

Task<TEntity>

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

IAsyncEnumerable<EntityLock<TEntity, TKey>> GetExpiredAsync(FilterDefinition<TEntity> filter = null, Options<TEntity> options = null, CancellationToken cancellationToken = default)

Parameters

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

Returns

IAsyncEnumerable<EntityLock<TEntity, TKey>>

GetLockedAsync(LockMode, FilterDefinition<TEntity>, Options<TEntity>, CancellationToken)

IAsyncEnumerable<EntityLock<TEntity, TKey>> GetLockedAsync(LockMode lockMode, FilterDefinition<TEntity> filter = null, Options<TEntity> options = null, CancellationToken cancellationToken = default)

Parameters

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

Returns

IAsyncEnumerable<EntityLock<TEntity, TKey>>

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

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

Parameters

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

Returns

IAsyncEnumerable<TEntity>

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

IAsyncEnumerable<TEntity> GetUnlockedAsync(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>

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

IAsyncEnumerable<EntityLock<TEntity, TKey>> GetWithLockInfoAsync(FilterDefinition<TEntity> filter = null, Options<TEntity> options = null, CancellationToken cancellationToken = default)

Parameters

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

Returns

IAsyncEnumerable<EntityLock<TEntity, TKey>>

LockAsync(FilterDefinition<TEntity>, TimeSpan?, string, Func<CallbackResult<TEntity>, Task>, IClientSessionHandle)

Locks a single document matched by filter without pre-committing to update-vs-delete.

Task<LockScope<TEntity, TKey>> LockAsync(FilterDefinition<TEntity> filter, TimeSpan? timeout = null, string actor = null, Func<CallbackResult<TEntity>, Task> completeAction = null, IClientSessionHandle session = null)

Parameters

filter FilterDefinition<TEntity>
timeout TimeSpan?
actor string
completeAction Func<CallbackResult<TEntity>, Task>
session IClientSessionHandle

Returns

Task<LockScope<TEntity, TKey>>

LockAsync(Expression<Func<TEntity, bool>>, TimeSpan?, string, Func<CallbackResult<TEntity>, Task>, IClientSessionHandle)

Locks a single document matched by predicate without pre-committing to update-vs-delete.

Task<LockScope<TEntity, TKey>> LockAsync(Expression<Func<TEntity, bool>> predicate = null, TimeSpan? timeout = null, string actor = null, Func<CallbackResult<TEntity>, Task> completeAction = null, IClientSessionHandle session = null)

Parameters

predicate Expression<Func<TEntity, bool>>
timeout TimeSpan?
actor string
completeAction Func<CallbackResult<TEntity>, Task>
session IClientSessionHandle

Returns

Task<LockScope<TEntity, TKey>>

LockAsync(TKey, TimeSpan?, string, Func<CallbackResult<TEntity>, Task>, IClientSessionHandle)

Locks a single document without pre-committing to update-vs-delete. The decision is taken at commit time via CommitAsync(CommitMode, T).

Task<LockScope<TEntity, TKey>> LockAsync(TKey id, TimeSpan? timeout = null, string actor = null, Func<CallbackResult<TEntity>, Task> completeAction = null, IClientSessionHandle session = null)

Parameters

id TKey
timeout TimeSpan?
actor string
completeAction Func<CallbackResult<TEntity>, Task>
session IClientSessionHandle

Returns

Task<LockScope<TEntity, TKey>>

LockManyAsync(FilterDefinition<TEntity>, TimeSpan?, string, CancellationToken, IClientSessionHandle)

Locks all documents matched by filter. The filter is resolved to an id list at acquire time; documents added later are not locked. Otherwise behaves like LockManyAsync(IEnumerable<TKey>, TimeSpan?, string, CancellationToken, IClientSessionHandle).

Task<DocumentLease<TEntity, TKey>> LockManyAsync(FilterDefinition<TEntity> filter, TimeSpan? timeout = null, string actor = null, CancellationToken cancellationToken = default, IClientSessionHandle session = null)

Parameters

filter FilterDefinition<TEntity>
timeout TimeSpan?
actor string
cancellationToken CancellationToken
session IClientSessionHandle

Returns

Task<DocumentLease<TEntity, TKey>>

LockManyAsync(IEnumerable<TKey>, TimeSpan?, string, CancellationToken, IClientSessionHandle)

Locks multiple documents identified by ids. Acquisition is sequential and ordered by key to avoid AB / BA deadlocks; if any acquisition fails, locks acquired so far are released and the failure is propagated (the lease never returns half-acquired). Per-document commit decisions are staged on the returned DocumentLease<T, TKey>.

Task<DocumentLease<TEntity, TKey>> LockManyAsync(IEnumerable<TKey> ids, TimeSpan? timeout = null, string actor = null, CancellationToken cancellationToken = default, IClientSessionHandle session = null)

Parameters

ids IEnumerable<TKey>
timeout TimeSpan?
actor string
cancellationToken CancellationToken
session IClientSessionHandle

Returns

Task<DocumentLease<TEntity, TKey>>

LockManyAsync(Expression<Func<TEntity, bool>>, TimeSpan?, string, CancellationToken, IClientSessionHandle)

Locks all documents matched by predicate. The predicate is resolved to an id list at acquire time.

Task<DocumentLease<TEntity, TKey>> LockManyAsync(Expression<Func<TEntity, bool>> predicate, TimeSpan? timeout = null, string actor = null, CancellationToken cancellationToken = default, IClientSessionHandle session = null)

Parameters

predicate Expression<Func<TEntity, bool>>
timeout TimeSpan?
actor string
cancellationToken CancellationToken
session IClientSessionHandle

Returns

Task<DocumentLease<TEntity, TKey>>

PickForDeleteAsync(FilterDefinition<TEntity>, TimeSpan?, string, Func<CallbackResult<TEntity>, Task>, IClientSessionHandle)

Task<EntityScope<TEntity, TKey>> PickForDeleteAsync(FilterDefinition<TEntity> filter, TimeSpan? timeout = null, string actor = null, Func<CallbackResult<TEntity>, Task> completeAction = null, IClientSessionHandle session = null)

Parameters

filter FilterDefinition<TEntity>
timeout TimeSpan?
actor string
completeAction Func<CallbackResult<TEntity>, Task>
session IClientSessionHandle

Returns

Task<EntityScope<TEntity, TKey>>

PickForDeleteAsync(Expression<Func<TEntity, bool>>, TimeSpan?, string, Func<CallbackResult<TEntity>, Task>, IClientSessionHandle)

Task<EntityScope<TEntity, TKey>> PickForDeleteAsync(Expression<Func<TEntity, bool>> predicate = null, TimeSpan? timeout = null, string actor = null, Func<CallbackResult<TEntity>, Task> completeAction = null, IClientSessionHandle session = null)

Parameters

predicate Expression<Func<TEntity, bool>>
timeout TimeSpan?
actor string
completeAction Func<CallbackResult<TEntity>, Task>
session IClientSessionHandle

Returns

Task<EntityScope<TEntity, TKey>>

PickForDeleteAsync(TKey, TimeSpan?, string, Func<CallbackResult<TEntity>, Task>, IClientSessionHandle)

Task<EntityScope<TEntity, TKey>> PickForDeleteAsync(TKey id, TimeSpan? timeout = null, string actor = null, Func<CallbackResult<TEntity>, Task> completeAction = null, IClientSessionHandle session = null)

Parameters

id TKey
timeout TimeSpan?
actor string
completeAction Func<CallbackResult<TEntity>, Task>
session IClientSessionHandle

Returns

Task<EntityScope<TEntity, TKey>>

PickForUpdateAsync(FilterDefinition<TEntity>, TimeSpan?, string, Func<CallbackResult<TEntity>, Task>, IClientSessionHandle)

Task<EntityScope<TEntity, TKey>> PickForUpdateAsync(FilterDefinition<TEntity> filter, TimeSpan? timeout = null, string actor = null, Func<CallbackResult<TEntity>, Task> completeAction = null, IClientSessionHandle session = null)

Parameters

filter FilterDefinition<TEntity>
timeout TimeSpan?
actor string
completeAction Func<CallbackResult<TEntity>, Task>
session IClientSessionHandle

Returns

Task<EntityScope<TEntity, TKey>>

PickForUpdateAsync(Expression<Func<TEntity, bool>>, TimeSpan?, string, Func<CallbackResult<TEntity>, Task>, IClientSessionHandle)

Task<EntityScope<TEntity, TKey>> PickForUpdateAsync(Expression<Func<TEntity, bool>> predicate = null, TimeSpan? timeout = null, string actor = null, Func<CallbackResult<TEntity>, Task> completeAction = null, IClientSessionHandle session = null)

Parameters

predicate Expression<Func<TEntity, bool>>
timeout TimeSpan?
actor string
completeAction Func<CallbackResult<TEntity>, Task>
session IClientSessionHandle

Returns

Task<EntityScope<TEntity, TKey>>

PickForUpdateAsync(TKey, TimeSpan?, string, Func<CallbackResult<TEntity>, Task>, IClientSessionHandle)

Task<EntityScope<TEntity, TKey>> PickForUpdateAsync(TKey id, TimeSpan? timeout = null, string actor = null, Func<CallbackResult<TEntity>, Task> completeAction = null, IClientSessionHandle session = null)

Parameters

id TKey
timeout TimeSpan?
actor string
completeAction Func<CallbackResult<TEntity>, Task>
session IClientSessionHandle

Returns

Task<EntityScope<TEntity, TKey>>

ReleaseManyAsync(ReleaseMode)

Task<long> ReleaseManyAsync(ReleaseMode mode)

Parameters

mode ReleaseMode

Returns

Task<long>

ReleaseOneAsync(TKey, ReleaseMode)

Task<EntityChangeResult<TEntity>> ReleaseOneAsync(TKey id, ReleaseMode mode)

Parameters

id TKey
mode ReleaseMode

Returns

Task<EntityChangeResult<TEntity>>

UpdateUnlockedAsync(FilterDefinition<TEntity>, UpdateDefinition<TEntity>)

Task<long> UpdateUnlockedAsync(FilterDefinition<TEntity> filter, UpdateDefinition<TEntity> update)

Parameters

filter FilterDefinition<TEntity>
update UpdateDefinition<TEntity>

Returns

Task<long>

UpdateUnlockedAsync(Expression<Func<TEntity, bool>>, UpdateDefinition<TEntity>)

Task<long> UpdateUnlockedAsync(Expression<Func<TEntity, bool>> predicate, UpdateDefinition<TEntity> update)

Parameters

predicate Expression<Func<TEntity, bool>>
update UpdateDefinition<TEntity>

Returns

Task<long>

WaitForDeleteAsync(TKey, TimeSpan?, TimeSpan?, string, Func<CallbackResult<TEntity>, Task>, CancellationToken)

Task<EntityScope<TEntity, TKey>> WaitForDeleteAsync(TKey id, TimeSpan? lockTimeout = null, TimeSpan? waitTimeout = null, string actor = null, Func<CallbackResult<TEntity>, Task> completeAction = null, CancellationToken cancellationToken = default)

Parameters

id TKey
lockTimeout TimeSpan?
waitTimeout TimeSpan?
actor string
completeAction Func<CallbackResult<TEntity>, Task>
cancellationToken CancellationToken

Returns

Task<EntityScope<TEntity, TKey>>

WaitForUpdateAsync(TKey, TimeSpan?, TimeSpan?, string, Func<CallbackResult<TEntity>, Task>, CancellationToken)

Task<EntityScope<TEntity, TKey>> WaitForUpdateAsync(TKey id, TimeSpan? lockTimeout = null, TimeSpan? waitTimeout = null, string actor = null, Func<CallbackResult<TEntity>, Task> completeAction = null, CancellationToken cancellationToken = default)

Parameters

id TKey
lockTimeout TimeSpan?
waitTimeout TimeSpan?
actor string
completeAction Func<CallbackResult<TEntity>, Task>
cancellationToken CancellationToken

Returns

Task<EntityScope<TEntity, TKey>>

Events

LockEvent

event EventHandler<LockEventArgs<TEntity>> LockEvent

Event Type

EventHandler<LockEventArgs<TEntity>>