public void DeleteProperties(List <PropValue> deleteList)
 {
     foreach (var pv in deleteList)
     {
         var delPV = PropValues.FirstOrDefault(p => p.PropID == pv.PropID && p.TaskID == pv.TaskID);
         if (delPV != null)
         {
             PropValues.Remove(delPV);
         }
     }
 }
        public void Update_Task(Task task)
        {
            WriteLog(task.ID, task.TaskName, DateTime.Now, "UPDATE");
            ChangeTracker.DetectChanges();
            foreach (var pv in task.PropValues)
            {
                var delPV = PropValues.FirstOrDefault(p => p.PropID == pv.PropID && p.TaskID == pv.TaskID);
                delPV = delPV == null ? pv : delPV;
                if (delPV.Property != null)
                {
                    var curIDs = delPV.Property.PropertiesLists.Select(p => p.ID).ToList();
                    PropertiesLists.RemoveRange(PropertiesLists.Where(pl => pl.PropID == delPV.PropID && !curIDs.Contains(pl.ID))); // удалить те, которых сейчас нет
                }
                PropValues.AddOrUpdate(delPV);
            }

            Tasks.AddOrUpdate(task);
            SaveChanges();
        }