/// <summary> /// Convert a saveBundle into a SaveMap /// </summary> public static Dictionary<Type, List<EntityInfo>> Convert(JObject saveBundle) { var dynSaveBundle = (dynamic) saveBundle; var entitiesArray = (JArray) dynSaveBundle.entities; var provider = new SaveBundleToSaveMap(); var saveWorkState = new SaveWorkState(provider, entitiesArray); return saveWorkState.SaveMap; }
protected void InitializeSaveState(JObject saveBundle) { JsonSerializer = CreateJsonSerializer(); var dynSaveBundle = (dynamic)saveBundle; var entitiesArray = (JArray)dynSaveBundle.entities; var dynSaveOptions = dynSaveBundle.saveOptions; SaveOptions = (SaveOptions)JsonSerializer.Deserialize(new JTokenReader(dynSaveOptions), typeof(SaveOptions)); SaveWorkState = new SaveWorkState(this, entitiesArray); }
public void SaveChanges(SaveWorkState saveWorkState) { lock (__lock) { _keyMappings.Clear(); var saveMap = saveWorkState.SaveMap; SaveTodoLists(saveMap); SaveTodoItems(saveMap); // ToList effectively copies the _keyMappings so that an incoming SaveChanges call doesn't clear the // keyMappings before the previous version has completed serializing. saveWorkState.KeyMappings = _keyMappings.ToList(); } }
public SaveResult SaveChanges(JObject saveBundle, TransactionSettings transactionSettings = null) { JsonSerializer = CreateJsonSerializer(); var dynSaveBundle = (dynamic)saveBundle; var entitiesArray = (JArray)dynSaveBundle.entities; var dynSaveOptions = dynSaveBundle.saveOptions; SaveOptions = (SaveOptions) JsonSerializer.Deserialize(new JTokenReader(dynSaveOptions), typeof(SaveOptions)); SaveWorkState = new SaveWorkState(this, entitiesArray); transactionSettings = transactionSettings ?? BreezeConfig.Instance.GetTransactionSettings(); try { if (transactionSettings.TransactionType == TransactionType.TransactionScope) { var txOptions = transactionSettings.ToTransactionOptions(); using (var txScope = new TransactionScope(TransactionScopeOption.Required, txOptions)) { OpenAndSave(SaveWorkState); txScope.Complete(); } } else if (transactionSettings.TransactionType == TransactionType.DbTransaction) { this.OpenDbConnection(); using (IDbTransaction tran = BeginTransaction(transactionSettings.IsolationLevelAs)) { try { OpenAndSave(SaveWorkState); tran.Commit(); } catch { tran.Rollback(); throw; } } } else { OpenAndSave(SaveWorkState); } } catch (EntityErrorsException e) { SaveWorkState.EntityErrors = e.EntityErrors; throw; } catch(Exception e2) { if (!HandleSaveException(e2, SaveWorkState)) { throw; } } finally { CloseDbConnection(); } return SaveWorkState.ToSaveResult(); }
protected abstract void SaveChangesCore(SaveWorkState saveWorkState);
// allows subclasses to plug in own save exception handling // either throw an exception here, return false or return true and modify the saveWorkState. protected virtual bool HandleSaveException(Exception e, SaveWorkState saveWorkState) { return(false); }
private void OpenAndSave(SaveWorkState saveWorkState) { OpenDbConnection(); // ensure connection is available for BeforeSaveEntities saveWorkState.BeforeSave(); SaveChangesCore(saveWorkState); saveWorkState.AfterSave(); }
// allows subclasses to plug in own save exception handling // either throw an exception here, return false or return true and modify the saveWorkState. protected virtual bool HandleSaveException(Exception e, SaveWorkState saveWorkState) { return false; }
protected override void SaveChangesCore(SaveWorkState saveWorkState) { throw new NotImplementedException(); }
protected override void SaveChangesCore(SaveWorkState saveWorkState) { Context.SaveChanges(saveWorkState); }
/// <summary> /// The default implementation calls SavesChangesCore to maintain compatiblity with existing /// ContextProvider implementations. /// </summary> /// <param name="saveWorkState"></param> /// <param name="cancellationToken"></param> /// <returns></returns> protected virtual Task SaveChangesCoreAsync(SaveWorkState saveWorkState, CancellationToken cancellationToken) { SaveChangesCore(saveWorkState); return(Task.FromResult(0)); }