private void RemoveFromDB(TreeNode node, bool needRightChild, TreeNode mostLeft = null)
 {
     using (TreeNodeContext db = new TreeNodeContext())
     {
         UpdateIDs(db, needRightChild, node, mostLeft);
         var nodeToRemove = db.TreeNodes.SingleOrDefault(n => n.NodeID == node.NodeID);
         if (nodeToRemove != null)
         {
             db.TreeNodes.Remove(nodeToRemove);
         }
         db.SaveChanges();
     }
 }
        private void UpdateIDs(TreeNodeContext db, bool needRightChild, TreeNode nodeToRemove, TreeNode mostLeft)
        {
            var firstChildOfRemovingNode = needRightChild ? db.TreeNodes.SingleOrDefault(node => node.ParentID == nodeToRemove.NodeID && node.value >= nodeToRemove.value) 
                                                          : db.TreeNodes.SingleOrDefault(node => node.ParentID == nodeToRemove.NodeID && node.value < nodeToRemove.value);

            var leftChild = needRightChild ? db.TreeNodes.SingleOrDefault(node => node.ParentID == nodeToRemove.NodeID && node.value < nodeToRemove.value) : null;

            if (firstChildOfRemovingNode != null)
            {
                if(mostLeft != null)
                {
                    var mostLeftInDB = db.TreeNodes.SingleOrDefault(node => node.NodeID == mostLeft.NodeID);
                    mostLeftInDB.ParentID = nodeToRemove.ParentID;
                    if (leftChild != null)
                    {
                        leftChild.ParentID = mostLeft.NodeID;
                    }
                    if(mostLeftInDB.NodeID == firstChildOfRemovingNode.NodeID)
                    {
                        db.SaveChanges();
                        return;
                    } 
                    firstChildOfRemovingNode.ParentID = mostLeftInDB.NodeID;
                    db.SaveChanges();
                    return;
                }
                firstChildOfRemovingNode.ParentID = nodeToRemove.ParentID;
                db.SaveChanges();
            }
        }
 private int AddInDB(TreeNode node)
 {
     using (TreeNodeContext db = new TreeNodeContext())
     {
         db.TreeNodes.Add(node);
         db.SaveChanges();
         return node.NodeID;
     }
 }