// 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); } } }
// 记录对 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); } } }
/// <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(); }
// 記錄 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); } } }
// 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); } } }
// 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); } } }