public List<ServerBrowserNode> LoadChildNodes(ServerBrowserNode node)
        {
            using (var context = _contextFactory.Create())
            {
                if (node == null)
                    return new List<ServerBrowserNode>(new[]
                    {
                        new ServerBrowserNode
                        {
                            Text = "Server",
                            Type = NodeType.Server
                        }
                    });

                switch (node.Type)
                {
                    case NodeType.Server:
                        return GetServerBrowserNodes();
                    case NodeType.DatabaseRoot:
                        return GetDatabaseRootNodes(context);
                    case NodeType.Database:
                        return GetDatabaseNodes(node);
                    case NodeType.Programmability:
                        return GetProgrammabilityNodes(node);
                    case NodeType.FunctionRoot:
                        return GetFunctionRootNodes(node);
                    case NodeType.ScalarValuedFunctionRoot:
                        return GetScalarValuedFunctionRootNodes(node);
                    case NodeType.TableValuedFunctionRoot:
                        return GetTableValuedFunctionRootNodes(node);
                    case NodeType.Table:
                        return GetTableNodes(node);
                    case NodeType.ColumnRoot:
                        return GetColumnRootNodes(node);
                    case NodeType.ProcedureRoot:
                        return GetProcedureRootNodes(node);
                    case NodeType.TableRoot:
                        return GetTableRootNodes(node);
                    default:
                        return new List<ServerBrowserNode>();
                }
            }
        }
 private static List<ServerBrowserNode> GetDatabaseNodes(ServerBrowserNode node)
 {
     return new List<ServerBrowserNode>(new[]
     {
         new ServerBrowserNode
         {
             Text = "Tables",
             Type = NodeType.TableRoot,
             ObjectId = node.ObjectId,
             Database = node.Database
         },
         new ServerBrowserNode
         {
             Text = "Programmability",
             Type = NodeType.Programmability,
             ObjectId = node.ObjectId,
             Database = node.Database
         }
     });
 }
 private List<ServerBrowserNode> GetTableRootNodes(ServerBrowserNode node)
 {
     using (var contextInDb = _contextFactory.Create(node.Database))
     {
         return new List<ServerBrowserNode>(contextInDb.Tables.Select(x => new ServerBrowserNode
         {
             ObjectId = x.object_id,
             Text = x.name,
             Type = NodeType.Table,
             Database = node.Database
         }));
     }
 }
 private List<ServerBrowserNode> GetTableValuedFunctionRootNodes(ServerBrowserNode node)
 {
     using (var contextInDb = _contextFactory.Create(node.Database))
     {
         return contextInDb.Objects.Where(x => x.type == "IF" || x.type == "TF").Select(x => new ServerBrowserNode
         {
             Database = node.Database,
             IsSingle = true,
             Text = x.name,
             Type = NodeType.TableValuedFunction,
             ObjectId = x.object_id
         }).ToList();
     }
 }
        private List<ServerBrowserNode> GetProcedureRootNodes(ServerBrowserNode node)
        {
            using (var contextInDb = _contextFactory.Create(node.Database))
            {
                var procedures = (from p in contextInDb.Procedures
                    join s in contextInDb.Schemas on p.schema_id equals s.schema_id
                    select new ServerBrowserNode
                    {
                        ObjectId = p.object_id,
                        Database = node.Database,
                        Type = NodeType.Procedure,
                        Text = s.name + "." + p.name,
                        IsSingle = true
                    }).ToList();

                return procedures;
            }
        }
        private List<ServerBrowserNode> GetColumnRootNodes(ServerBrowserNode node)
        {
            using (var contextInDb = _contextFactory.Create(node.Database))
            {
                var columns = contextInDb.Columns.Where(x => x.object_id == node.ObjectId).Select(x => new ServerBrowserNode
                {
                    Database = node.Database,
                    ObjectId = x.column_id,
                    Text = x.name,
                    Type = NodeType.Column,
                    IsSingle = true
                }).ToList();

                return columns;
            }
        }
 private static List<ServerBrowserNode> GetTableNodes(ServerBrowserNode node)
 {
     return new List<ServerBrowserNode>(new[]
     {
         new ServerBrowserNode
         {
             Text = "Columns",
             Type = NodeType.ColumnRoot,
             Database = node.Database,
             ObjectId = node.ObjectId
         }
     });
 }
 private static List<ServerBrowserNode> GetProgrammabilityNodes(ServerBrowserNode node)
 {
     return new List<ServerBrowserNode>(new[]
     {
         new ServerBrowserNode
         {
             Text = "Procedures",
             Type = NodeType.ProcedureRoot,
             ObjectId = node.ObjectId,
             Database = node.Database
         },
         new ServerBrowserNode
         {
             Text = "Functions",
             Type = NodeType.FunctionRoot,
             ObjectId = node.ObjectId,
             Database = node.Database
         },
     });
 }
 private static List<ServerBrowserNode> GetFunctionRootNodes(ServerBrowserNode node)
 {
     return new List<ServerBrowserNode>(new[]
     {
         new ServerBrowserNode
         {
             Text = "Table-valued Functions",
             Type = NodeType.TableValuedFunctionRoot,
             ObjectId = node.ObjectId,
             Database = node.Database
         },
         new ServerBrowserNode
         {
             Text = "Scalar-valued Functions",
             Type = NodeType.ScalarValuedFunctionRoot,
             ObjectId = node.ObjectId,
             Database = node.Database
         },
     });
 }