/// <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()); }
/// <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()); }