Exemplo n.º 1
0
 // 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;
 }
Exemplo n.º 2
0
        // 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;
        }
Exemplo n.º 3
0
 // 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;
         }
     }
 }