public Task <OperationResultOf <TEntity> > TryUpdateAsync(TKey key, Action <TEntity> updateAction, CancellationToken cancellationToken = default) { return(StoreSessionSafeUsageVisitor.TryUseAsync(async dbSession => { var validationOpRes = KeyEntityValidator.Validate(key); if (!validationOpRes) { return validationOpRes.ErrorMessage.AsFailedOpResOf <TEntity>(); } var getOpRes = await this.TryGetSingleAsync(key, cancellationToken) .ConfigureAwait(false); if (!getOpRes) { return getOpRes; } var existingEntity = getOpRes.Value; updateAction(existingEntity); await dbSession.UpdateAsync(getOpRes.Value, cancellationToken) .ConfigureAwait(false); return await SaveChangesAndReturnResultAsync( dbSession, existingEntity, cancellationToken) .ConfigureAwait(false); })); }
public Task <OperationResultOf <TEntity> > TryAddAsync(TEntity newEntity, CancellationToken cancellationToken = default) { return(StoreSessionSafeUsageVisitor.TryUseAsync(async dbSession => { var validationOpRes = KeyEntityValidator.Validate(newEntity); if (!validationOpRes) { return validationOpRes.ErrorMessage.AsFailedOpResOf <TEntity>(); } await dbSession.SaveAsync(dbSession, cancellationToken) .ConfigureAwait(false); return await SaveChangesAndReturnResultAsync(dbSession, newEntity, cancellationToken) .ConfigureAwait(false); })); }