예제 #1
0
        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);
            }));
        }
예제 #2
0
        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);
            }));
        }