コード例 #1
0
        // Records an addition to collection valued properties on SelfTracking Entities.
        public 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 RecordAdditionToCollectionProperties(string propertyName, object value)
        {
            if (_changeTrackingEnabled)
            {
                // 如果在删除实体后重新添加该实体,则不应当在此处执行任何操作
                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);
                }
            }
        }
コード例 #3
0
        /// <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 (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
ファイル: Model1.cs プロジェクト: twMVC/twMVC-1-2
        // 記錄 SelfTracking 實體上之集合值屬性的加入。
        internal void RecordAdditionToCollectionProperties(string propertyName, object value)
        {
            if (_changeTrackingEnabled)
            {
                // 在刪除該實體後再將其重新加入,我們在此處應該不用執行任何動作,接著
                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);
                }
            }
        }
コード例 #5
0
        // Registra una adición a las propiedades con valore de la colección en las entidades SelfTracking.
        internal void RecordAdditionToCollectionProperties(string propertyName, object value)
        {
            if (_changeTrackingEnabled)
            {
                // Agregar la entidad después de eliminarla, no se debe hacer nada aquí
                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);
                }
            }
        }
コード例 #6
0
 // Records an addition to collection valued properties on SelfTracking Entities.
 internal void RecordAdditionToCollectionProperties(string propertyName, Entity value)
 {
     if (IsChangeTrackingEnabled && _objectState != ObjectState.Added)
     {
         // Adding the entity back after it has been deleted, 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);
             }
         }
         else
         {
             if (!ObjectsAddedToCollectionProperties.ContainsKey(propertyName))
             {
                 ObjectsAddedToCollectionProperties[propertyName] = new EntityList();
             }
             ObjectsAddedToCollectionProperties[propertyName].Add(value);
         }
     }
 }