/// <summary> /// Cancels the transaction. /// </summary> public void CancelTransaction() { if (TransactionStack.Count > 0) { TransactionStack.Pop(); } }
public void TestSaveUndoSaveRedo() { var stack = new TransactionStack(5); using (var manager = new DirtiableManager(stack)) { var dirtiable = new SimpleDirtiable(); var operation = new SimpleDirtyingOperation(dirtiable.Yield()); using (stack.CreateTransaction()) { stack.PushOperation(operation); } Assert.True(dirtiable.IsDirty); manager.CreateSnapshot(); Assert.False(dirtiable.IsDirty); stack.Rollback(); Assert.True(dirtiable.IsDirty); manager.CreateSnapshot(); Assert.False(dirtiable.IsDirty); stack.Rollforward(); Assert.True(dirtiable.IsDirty); manager.CreateSnapshot(); Assert.False(dirtiable.IsDirty); } }
} // CommitTransaction public static void RollBackTransaction() { if (TransactionStack.Count != 0) { var topLevelTransaction = TransactionStack.Peek(); if (topLevelTransaction != null) topLevelTransaction.UnExecute(); TransactionStack.Clear(); } } // RollBackTransaction
internal void RollBackTransaction() { if (TransactionStack.Count != 0) { ITransaction transaction = TransactionStack.Peek(); if ((transaction != null) && (transaction.AccumulatingAction != null)) { transaction.AccumulatingAction.UnExecute(); } TransactionStack.Clear(); } }
/// <summary> /// Rolls the back transaction. /// </summary> public void RollBackTransaction() { if (TransactionStack.Count != 0) { var topLevelTransaction = TransactionStack.Peek(); if (topLevelTransaction != null && topLevelTransaction.AccumulatingAction != null) { topLevelTransaction.AccumulatingAction.UnExecute(); } TransactionStack.Clear(); } }
internal void CommitTransaction() { if (TransactionStack.Count == 0) { throw new InvalidOperationException("ActionManager.CommitTransaction was called when there is no open transaction (TransactionStack is empty). Please examine the stack trace of this exception to find code which called CommitTransaction one time too many. Normally you don't call OpenTransaction and CommitTransaction directly, but use using(var t = Transaction.Create(Root)) instead."); } ITransaction transaction = TransactionStack.Pop(); if (transaction.AccumulatingAction.Count > 0) { RecordAction(transaction.AccumulatingAction); } }
public void TestDoAction() { var stack = new TransactionStack(5); using (new DirtiableManager(stack)) { var dirtiable = new SimpleDirtiable(); using (stack.CreateTransaction()) { var operation = new SimpleDirtyingOperation(dirtiable.Yield()); stack.PushOperation(operation); } Assert.True(dirtiable.IsDirty); } }
public void TestUndo() { var stack = new TransactionStack(5); using (new DirtiableManager(stack)) { var dirtiable = new SimpleDirtiable(); var operation = new SimpleDirtyingOperation(dirtiable.Yield()); using (stack.CreateTransaction()) { stack.PushOperation(operation); } Assert.Equal(true, dirtiable.IsDirty); stack.Rollback(); Assert.Equal(false, dirtiable.IsDirty); } }
public void TestDoAndSave() { var stack = new TransactionStack(5); using (var manager = new DirtiableManager(stack)) { var dirtiable = new SimpleDirtiable(); var operation = new SimpleDirtyingOperation(dirtiable.Yield()); using (stack.CreateTransaction()) { stack.PushOperation(operation); } Assert.Equal(true, dirtiable.IsDirty); manager.CreateSnapshot(); Assert.Equal(false, dirtiable.IsDirty); } }
} // OpenTransaction public static void CommitTransaction() { if (TransactionStack.Count == 0) { throw new InvalidOperationException( "ActionManager.CommitTransaction was called" + " when there is no open transaction (TransactionStack is empty)." + " Please examine the stack trace of this exception to find code" + " which called CommitTransaction one time too many." + " Normally you don't call OpenTransaction and CommitTransaction directly," + " but use using(var t = Transaction.Create(Root)) instead."); } Transaction committing = TransactionStack.Pop(); if (committing.HasActions()) RecordAction(committing); } // CommitTransaction
public void OpenTransaction(ITransaction t) { TransactionStack.Push(t); }
} // CreateTransaction public static void OpenTransaction(Transaction t) { TransactionStack.Push(t); } // OpenTransaction
internal void OpenTransaction(ITransaction t) { TransactionStack.Push(t); }