/// <summary> /// Для каждого значимого свойства, которое имеет отображение в БД /// </summary> protected virtual void SetValue(Object value, [CallerMemberName] string propertyName = "") { SetCurrentProperties(propertyName, value); if (Monitor != null) { //var monitor = ((IEntity) this).Monitor; if (value is BaseEntity baseEntity) { //if(!monitor.EntitySet.ContainsKey(baseEntity)) // monitor.Apply(baseEntity); // TODO: можно автоматом добавить в трекер сущьности } else if (value is EntityCollection <BaseEntity> entityCollection) { // TODO: можно автоматом добавить в трекер сущьности //if (!(monitor.EntitySet.Where()) // ((IEntity)this).Monitor.Apply(baseEntity); } else { UpdateEntityState(value, propertyName); } Monitor?.OnEntityChanged(this, propertyName); } PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); }
/// <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); } } }