Esempio n. 1
0
        /// <summary>
        /// Saves the changes made by the client.
        /// </summary>
        /// <param name="saveBundle">The changes to save.</param>
        /// <param name="saveChangesOptions">The saving options.</param>
        /// <param name="cancellationToken">The cancellation token</param>
        /// <returns>The save result.</returns>
        protected async Task <SaveResult> SaveChangesAsync(SaveBundle saveBundle, AsyncSaveChangesOptions saveChangesOptions, CancellationToken cancellationToken)
        {
            var saveWorkState = _saveWorkStateFactory.Create(saveBundle,
                                                             info => AfterCreateEntityInfo(info, saveBundle.SaveOptions) &&
                                                             (saveChangesOptions.AfterCreateEntityInfoAction?.Invoke(info, saveBundle.SaveOptions) ?? true));

            try
            {
                var context = new SaveChangesContext(saveWorkState.SaveMap, saveBundle.SaveOptions);
                return(await SaveChangesCoreAsync(saveWorkState, context, saveChangesOptions, cancellationToken).ConfigureAwait(false));
            }
            catch (Exception e)
            {
                if (!HandleSaveException(e, saveWorkState))
                {
                    throw;
                }
            }

            return(saveWorkState.ToSaveResult());
        }
Esempio n. 2
0
        /// <summary>
        /// Saves the changes made by the client.
        /// </summary>
        /// <param name="workState">The save work state.</param>
        /// <param name="context">The save context.</param>
        /// <param name="saveChangesOptions">The save options.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns>The save result.</returns>
        protected virtual async Task <SaveResult> SaveChangesCoreAsync(SaveWorkState workState, SaveChangesContext context, AsyncSaveChangesOptions saveChangesOptions, CancellationToken cancellationToken)
        {
            workState.KeyMappings = await _entityUpdater.FetchAndApplyChangesAsync(this, context, saveChangesOptions, cancellationToken).ConfigureAwait(false);

            return(workState.ToSaveResult());
        }