public JsonResult ChangeNodePosition(int currentNode, int?parentNode, int position) { using (BatiFrenDBEntities db = new BatiFrenDBEntities()) { var location = db.Menus.First(x => x.MenuID == currentNode); var newSiblingsBelow = db.Menus.Where(l => l.ParentID == parentNode && l.OrderNumber >= position); foreach (var sibling in newSiblingsBelow) { sibling.OrderNumber = sibling.OrderNumber + 1; } var oldSiblingsBelow = db.Menus.Where(l => l.ParentID == parentNode && l.OrderNumber > location.OrderNumber); foreach (var sibling in oldSiblingsBelow) { sibling.OrderNumber = sibling.OrderNumber - 1; } location.ParentID = parentNode; location.OrderNumber = position; db.SaveChanges(); } return(this.Json(true)); }