internal void ChangeState(RecordStateTransitions transition, bool saveInTransaction = false) { this.RecordState = GetChangedState(this.RecordState, transition); if (!saveInTransaction) { this.RollbackedState = GetChangedState(this.RollbackedState, transition); } }
static RecordState GetChangedState(RecordState state, RecordStateTransitions transition) { switch (state) { case RecordState.Added: switch (transition) { case RecordStateTransitions.Save: return(RecordState.Unchanged); case RecordStateTransitions.Delete: case RecordStateTransitions.Detach: return(RecordState.Detached); case RecordStateTransitions.Modify: return(RecordState.Added); case RecordStateTransitions.Attach: throw new InvalidOperationException(); } break; case RecordState.Modified: switch (transition) { case RecordStateTransitions.Save: return(RecordState.Unchanged); case RecordStateTransitions.Delete: return(RecordState.Deleted); case RecordStateTransitions.Modify: return(RecordState.Modified); case RecordStateTransitions.Attach: throw new InvalidOperationException(); case RecordStateTransitions.Detach: return(RecordState.Detached); } break; case RecordState.Deleted: switch (transition) { case RecordStateTransitions.Save: case RecordStateTransitions.Detach: return(RecordState.Detached); case RecordStateTransitions.Delete: throw new InvalidOperationException(); case RecordStateTransitions.Modify: return(RecordState.Deleted); case RecordStateTransitions.Attach: return(RecordState.Modified); } break; case RecordState.Unchanged: switch (transition) { case RecordStateTransitions.Save: return(RecordState.Unchanged); case RecordStateTransitions.Delete: return(RecordState.Deleted); case RecordStateTransitions.Modify: return(RecordState.Modified); case RecordStateTransitions.Attach: throw new InvalidOperationException(); case RecordStateTransitions.Detach: return(RecordState.Detached); } break; case RecordState.Detached: switch (transition) { case RecordStateTransitions.Save: case RecordStateTransitions.Delete: throw new InvalidOperationException(); case RecordStateTransitions.Attach: return(RecordState.Added); case RecordStateTransitions.Modify: case RecordStateTransitions.Detach: return(RecordState.Detached); } break; } throw new NotSupportedException(); }