Ejemplo n.º 1
0
        /// <summary>
        /// Updates the <see cref="PersonDetail"/> object.
        /// </summary>
        /// <param name="value">The <see cref="PersonDetail"/> object.</param>
        /// <param name="id">The <see cref="Person"/> identifier.</param>
        /// <returns>A refreshed <see cref="PersonDetail"/> object.</returns>
        public Task <PersonDetail> UpdateDetailAsync(PersonDetail value, Guid id)
        {
            return(ManagerInvoker.Default.InvokeAsync(this, async() =>
            {
                ExecutionContext.Current.OperationType = OperationType.Update;
                if (value != null)
                {
                    value.Id = id;
                }
                EntityBase.CleanUp(value, id);
                if (_updateDetailOnPreValidateAsync != null)
                {
                    await _updateDetailOnPreValidateAsync(value, id).ConfigureAwait(false);
                }

                MultiValidator.Create()
                .Add(value.Validate(nameof(value)).Mandatory().Entity(PersonDetailValidator.Default))
                .Additional((__mv) => _updateDetailOnValidate?.Invoke(__mv, value, id))
                .Run().ThrowOnError();

                if (_updateDetailOnBeforeAsync != null)
                {
                    await _updateDetailOnBeforeAsync(value, id).ConfigureAwait(false);
                }
                var __result = await PersonDataSvc.UpdateDetailAsync(value).ConfigureAwait(false);
                if (_updateDetailOnAfterAsync != null)
                {
                    await _updateDetailOnAfterAsync(__result, id).ConfigureAwait(false);
                }
                Cleaner.Clean(__result);
                return __result;
            }));
        }