// Resets the ObjectChangeTracker to the Unchanged state and // clears the original values as well as the record of changes // to collection properties public void AcceptChanges() { OnObjectStateChanging(ObjectState.Unchanged); OriginalValues.Clear(); ModifiedValues.Clear(); ObjectsAddedToCollectionProperties.Clear(); ObjectsRemovedFromCollectionProperties.Clear(); ChangeTrackingEnabled = true; _objectState = ObjectState.Unchanged; }
// Resets the ObjectChangeTracker to the Unchanged state and // sets the actual values to be the original values as well as the record of changes // to collection properties public void CancelChanges(IObjectWithChangeTracker entity) { if (this.State == ObjectState.Added) { return; } OnObjectStateChanging(ObjectState.Unchanged); ChangeTrackingEnabled = false; ModifiedValues.Clear(); var originalValues = OriginalValues.ToArray(); foreach (var kvp in originalValues) { string propertyName = kvp.Key; object propertyValue = kvp.Value; entity.SetPropertyValue(propertyName, propertyValue); } var objectsAddedToCollectionProperties = ObjectsAddedToCollectionProperties.ToArray(); foreach (var kvp in objectsAddedToCollectionProperties) { var propertyName = kvp.Key; var items = kvp.Value; foreach (var item in items.ToArray()) { entity.RemoveItemFromCollection(propertyName, item); } } ObjectsAddedToCollectionProperties.Clear(); var objectsRemovedFromCollectionProperties = ObjectsRemovedFromCollectionProperties.ToArray(); foreach (var kvp in objectsRemovedFromCollectionProperties) { var propertyName = kvp.Key; var items = kvp.Value; foreach (var item in items.ToArray()) { entity.AddItemToCollection(propertyName, item); } } ObjectsRemovedFromCollectionProperties.Clear(); ChangeTrackingEnabled = true; _objectState = ObjectState.Unchanged; }
// Captures the original value for a property that is changing. internal void RecordValue(string propertyName, object oldValue, object newValue) { if (_changeTrackingEnabled && _objectState != ObjectState.Added) { if (OriginalValues.ContainsKey(propertyName) && OriginalValues[propertyName] == newValue) { // On repasse à l'état initial OriginalValues.Remove(propertyName); ModifiedValues.Remove(propertyName); } else { if (!OriginalValues.ContainsKey(propertyName)) { OriginalValues[propertyName] = oldValue; } ModifiedValues[propertyName] = newValue; } } }