Пример #1
0
        /// <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;
                }
            }
        }