private SiteMapNode CreateSiteMapFromRow(Systems_SiteMap item)
 {
     if (_nodes.ContainsKey(item.ID))
         throw new ProviderException("MDuplicate node ID");
     var node = new SiteMapNode(this, item.ID.ToString());
     if (!string.IsNullOrEmpty(item.Url))
     {
         node.Title = string.IsNullOrEmpty(item.Title) ? null : item.Title;
         node.Description =
          string.IsNullOrEmpty(item.Description) ? null : item.Description;
         node.Url = string.IsNullOrEmpty(item.Url) ? null : item.Url;
     }
     else
     {
         node.Title = string.IsNullOrEmpty(item.Title) ? null : item.Title;
         node.Description =
          string.IsNullOrEmpty(item.Description) ? null : item.Description;
         IDictionary<string, string> routeValues = new Dictionary<string, string>();
         if (string.IsNullOrEmpty(item.UrlController))
             routeValues.Add("controller", "Home");
         else
             routeValues.Add("controller", item.UrlController);
         if (string.IsNullOrEmpty(item.UrlController))
             routeValues.Add("action", "Index");
         else
             routeValues.Add("action", item.UrlAction);
         
         HttpContextWrapper httpContext = new HttpContextWrapper(HttpContext.Current);
         RouteData routeData = RouteTable.Routes.GetRouteData(httpContext);
         if (routeData != null)
         {
             VirtualPathData virtualPath = routeData.Route.GetVirtualPath(
               new RequestContext(httpContext, routeData),
               new RouteValueDictionary(routeValues));
             if (virtualPath != null)
             {
                 node.Url = "~/" + virtualPath.VirtualPath;
             }
         }
     }
     _nodes.Add(item.ID, node);
     return node;
 }
 private SiteMapNode GetParentNodeFromNode(Systems_SiteMap item)
 {
     if (!_nodes.ContainsKey(item.ParentID))
         throw new ProviderException("Invalid parent ID");
     return _nodes[item.ParentID];
 }