public CompanyStructured.Common.Models.Node GetRoot()
 {
     CompanyStructuredSample.Repository.Node node    = ctx.Node.Where(r => r.ParentId == null).FirstOrDefault();
     CompanyStructured.Common.Models.Node    comnode = new CompanyStructured.Common.Models.Node
     {
         Id       = node.Id,
         name     = node.Name,
         parentId = node.ParentId
     };
     return(comnode);
 }
        //public NodeByParentName GetNodeWithParentName(int id)
        //{
        //   CompanyStructured.Common.Models.Node n = Getnode(id);
        //    NodeByParentName nodebyparentname = new NodeByParentName
        //    {
        //        Id = n.Id,
        //        Name = n.name,
        //        DirectParentId = n.parentId,
        //        DirectParentName = n.parentId is null? string.Empty : nodes.Where(r => r.Id == n.parentId).Select(nn => nn.name).FirstOrDefault()
        //    };
        //    return nodebyparentname;
        //}
        public CompanyStructured.Common.Models.Node Getnode(int nodeid)
        {
            nodes = new List <Common.Models.Node>();

            CompanyStructuredSample.Repository.Node findednode = ctx.Node.Where(r => r.Id == nodeid).Single();
            CompanyStructured.Common.Models.Node    n          = new CompanyStructured.Common.Models.Node
            {
                Id       = findednode.Id,
                name     = findednode.Name,
                parentId = findednode.ParentId
            };
            if (n.parentId is null)
            {
                return(GetRoot());
            }
            return(n);
        }
        //It's supposed if changed the parentid of given node the parent of their children dont changed
        public bool Change_the_parent_node_of_a_given_node(parentchange pc)
        {
            CompanyStructuredSample.Repository.Node given_node = ctx.Node.SingleOrDefault(nc => nc.Id == pc.id);
            given_node.ParentId = pc.newparentid;
            ctx.Node.Attach(given_node);
            ctx.Entry(given_node).State = System.Data.Entity.EntityState.Modified;
            try
            {
                ctx.SaveChanges();
                return(true);
            }
            catch
            {
                return(false);
            }

            //IEnumerable<CompanyStructured.Common.Models.Node> nodes = Get_all_children(n);
            ////it's needed to change parent of the given node either
            //nodes.ToList().Add(n);
            //nodes.ToList().ForEach(x => x.parentId = newparent.Id);

            //using (var ctx = new CompanyStructuredContext())
            //{
            //    foreach (var item in nodes)
            //    {
            //        CompanyStructuredSample.Repository.Node itemmap = new CompanyStructuredSample.Repository.Node
            //        {
            //            Id = n.Id,
            //            Name = n.name,
            //            ParentId = n.parentId
            //        };
            //        ctx.Node.Attach(itemmap);
            //        ctx.Entry(itemmap).State = System.Data.Entity.EntityState.Modified;
            //    }
            //    try
            //    {
            //        ctx.SaveChanges();
            //        return true;
            //    }
            //    catch
            //    {
            //        return false;
            //    }
            //}
        }
 public CompanyStructuredSample.Repository.Node GetParent(int id)
 {
     CompanyStructured.Common.Models.Node n = Getnode(id);
     CompanyStructured.Common.Models.Node parent;
     if (n.parentId is null)
     {
         parent = GetRoot();
     }
     else
     {
         int index = (int)n.parentId;
         parent = Getnode(index);
     }
     CompanyStructuredSample.Repository.Node rparent = new CompanyStructuredSample.Repository.Node
     {
         Id       = parent.Id,
         Name     = parent.name,
         ParentId = parent.parentId
     };
     return(rparent);
 }