Persistence
Repository base class and other requirements.
Motivation
/// <summary>
/// IRepository interface
/// </summary>
/// <typeparam name="TAggregate">The type of aggregate</typeparam>
/// <typeparam name="TIdentity">The tpye of aggregate identity</typeparam>
/// <typeparam name="TKey">The type of database primary key</typeparam>
public interface IRepository<TAggregate, TIdentity, TKey>
where TKey : struct, IEquatable<TKey>
where TIdentity : class
where TAggregate : Aggregate<TIdentity, TKey>
{
/// <summary>
/// Gets record from database
/// </summary>
/// <param name="identity">Aggregate</param>
/// <param name="cancellationToken">Cancellation token</param>
Task<TAggregate> GetAsync(TIdentity identity, CancellationToken cancellationToken = default);
/// <summary>
/// Adds record to database
/// </summary>
/// <param name="aggregate">Aggregate identifier</param>
/// <param name="cancellationToken">Cancellation token</param>
/// <returns>Record from database</returns>
Task AddAsync(TAggregate aggregate, CancellationToken cancellationToken = default);
/// <summary>
/// Commit changes to database
/// </summary>
/// <param name="aggregate">Aggregate</param>
/// <param name="cancellationToken">Cancellation token</param>
Task SaveChangesAsync(TAggregate aggregate, CancellationToken cancellationToken = default);
}Last updated