Пример #1
0
        // Records an addition to collection valued properties on SelfTracking Entities.
        internal void RecordAdditionToCollectionProperties(string propertyName, object value)
        {
            if (_changeTrackingEnabled)
            {
                // Add the entity back after deleting it, we should do nothing here then
                if (ObjectsRemovedFromCollectionProperties.ContainsKey(propertyName) &&
                    ObjectsRemovedFromCollectionProperties[propertyName].Contains(value))
                {
                    ObjectsRemovedFromCollectionProperties[propertyName].Remove(value);
                    if (ObjectsRemovedFromCollectionProperties[propertyName].Count == 0)
                    {
                        ObjectsRemovedFromCollectionProperties.Remove(propertyName);
                    }
                    return;
                }

                if (!ObjectsAddedToCollectionProperties.ContainsKey(propertyName))
                {
                    ObjectsAddedToCollectionProperties[propertyName] = new ObjectList();
                    ObjectsAddedToCollectionProperties[propertyName].Add(value);
                }
                else
                {
                    ObjectsAddedToCollectionProperties[propertyName].Add(value);
                }
            }
        }
Пример #2
0
        // 记录对 SelfTracking 实体的集合值属性的删除操作。
        internal void RecordRemovalFromCollectionProperties(string propertyName, object value)
        {
            if (_changeTrackingEnabled)
            {
                // 如果在添加实体后重新删除该实体,则不应当在此处执行任何操作
                if (ObjectsAddedToCollectionProperties.ContainsKey(propertyName) &&
                    ObjectsAddedToCollectionProperties[propertyName].Contains(value))
                {
                    ObjectsAddedToCollectionProperties[propertyName].Remove(value);
                    if (ObjectsAddedToCollectionProperties[propertyName].Count == 0)
                    {
                        ObjectsAddedToCollectionProperties.Remove(propertyName);
                    }
                    return;
                }

                if (!ObjectsRemovedFromCollectionProperties.ContainsKey(propertyName))
                {
                    ObjectsRemovedFromCollectionProperties[propertyName] = new ObjectList();
                    ObjectsRemovedFromCollectionProperties[propertyName].Add(value);
                }
                else
                {
                    if (!ObjectsRemovedFromCollectionProperties[propertyName].Contains(value))
                    {
                        ObjectsRemovedFromCollectionProperties[propertyName].Add(value);
                    }
                }
            }
        }
        /// <summary>
        /// Trackables the collection changed.
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="e">The <see cref="NotifyTrackableCollectionChangedEventArgs"/> instance containing the event data.</param>
        /// <param name="propertyName">Name of the property.</param>
        private void TrackableCollectionChanged(object sender, NotifyCollectionChangedEventArgs e, string propertyName)
        {
            switch (e.Action)
            {
            case NotifyCollectionChangedAction.Add:
                foreach (var newItem in e.NewItems)
                {
                    //todo:implémenter la récursivité sur l'ajout des élements dans la collection
                    //var project = newItem as IObjectWithChangeTracker;
                    //if (project != null)
                    //{
                    //    if (this.ChangeTrackingEnabled)
                    //    {
                    //        project.ChangeTracker.Start();
                    //    }
                    //}
                    RecordAdditionToCollectionProperties(propertyName, newItem);
                }
                break;

            case NotifyCollectionChangedAction.Remove:
                foreach (var odlItem in e.OldItems)
                {
                    RecordRemovalFromCollectionProperties(propertyName, odlItem);
                }
                break;

            case NotifyCollectionChangedAction.Reset:
            {
                // Cas d'un Clear sur la collection.
                // Vide le cache des modifications pour la collection.
                if (ObjectsRemovedFromCollectionProperties.ContainsKey(propertyName))
                {
                    ObjectsRemovedFromCollectionProperties.Remove(propertyName);
                }

                if (ObjectsAddedToCollectionProperties.ContainsKey(propertyName))
                {
                    ObjectsAddedToCollectionProperties.Remove(propertyName);
                }

                // Tranfère les données de départ dans les élements supprimés.
                if (ObjectsOriginalFromCollectionProperties.Count > 0)
                {
                    foreach (var item in ObjectsOriginalFromCollectionProperties[propertyName])
                    {
                        RecordRemovalFromCollectionProperties(propertyName, item);
                    }
                }
            }
            break;

            case NotifyCollectionChangedAction.Replace:
            {
                // Comment gérer le cas d'un changement d'instance dans la liste ?
            }
            break;
            }
            UpdateChangeState();
        }
Пример #4
0
 // Records a removal to collection valued properties on SelfTracking Entities.
 internal void RecordRemovalFromCollectionProperties(string propertyName, Entity value)
 {
     if (IsChangeTrackingEnabled && _objectState != ObjectState.Added)
     {
         // Deleteing the entity after it has been added, we should do nothing here then
         if (ObjectsAddedToCollectionProperties.ContainsKey(propertyName) &&
             ObjectsAddedToCollectionProperties[propertyName].Contains(value))
         {
             ObjectsAddedToCollectionProperties[propertyName].Remove(value);
             if (ObjectsAddedToCollectionProperties[propertyName].Count == 0)
             {
                 ObjectsAddedToCollectionProperties.Remove(propertyName);
             }
         }
         else
         {
             if (!ObjectsRemovedFromCollectionProperties.ContainsKey(propertyName))
             {
                 ObjectsRemovedFromCollectionProperties[propertyName] = new EntityList();
             }
             ObjectsRemovedFromCollectionProperties[propertyName].Add(value);
         }
     }
 }