/// <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));
        }
Esempio n. 2
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);
                }
            }
        }