/// <summary> /// Удалить все сущьности из коллекции. /// </summary> protected override void ClearItems() { if (Monitor != null) { foreach (var entity in Items) { if (Monitor.EntitySet.ContainsKey(entity)) { var state = Monitor.EntitySet[entity].Entity.State; if (state == EntityState.New) { Monitor.EntitySet.Remove(entity); entity.Dispose(); } else if (state == EntityState.Modified || state == EntityState.Unmodified) { Monitor.EntitySet[entity].Entity.State = EntityState.Deleted; } } } Monitor.UpdateIsChanged(); } IList <TEntity> tempList = null; if (Monitor != null) { tempList = Items.ToList(); } base.ClearItems(); if (Monitor != null && tempList != null) { foreach (var entity in tempList) { Monitor?.OnEntityChanged(entity); } } }
/// <summary> /// Обновление состояния сущьности действий связанных с действиями /// </summary> /// <param name="value">Значение set</param> /// <param name="propertyName"></param> public void UpdateEntityState(Object value, string propertyName) { if (Monitor != null && Monitor.EntitySet.ContainsKey(this) && Monitor.EntitySet[this].OriginalValues.ContainsKey(propertyName)) { var newEqualOriginal = AreEqualsToOriginal(Monitor.EntitySet[this].OriginalValues[propertyName], value); if (newEqualOriginal) { if (ChangedProperties.Contains(propertyName)) { ChangedProperties.Remove(propertyName); } if (!ChangedProperties.Any()) { if (State == EntityState.Modified) { State = EntityState.Unmodified; } Monitor.UpdateIsChanged(); } } else { if (!ChangedProperties.Contains(propertyName)) { ChangedProperties.Add(propertyName); } if (State == EntityState.Unmodified) { State = EntityState.Modified; } //Сигнализируем, что есть изменения Monitor.IsChanged = true; } } }