コード例 #1
0
        protected void StoreServerNode()
        {
            DataSourceNodeBase srvrNode = serverStructure.ServerNode;
            NodeService        nsvc     = new NodeService();
            TypeService        tsvc     = new TypeService();
            AttributeService   attsvc   = new AttributeService();
            Node existing = nsvc.GetByName(srvrNode.Name);

            if (existing == null)
            {
                //doesn't exist--add it
                existing = new Node {
                    name = srvrNode.Name
                };
                NodeType srvrType = tsvc.GetNodeType("SQL Server", true);
                existing.type = srvrType;
                int srvrId = nsvc.AddNode(existing);
                existing.id = srvrId;
            }
            else
            {
                srvrNode.NodeIdentity = existing.id;
            }
            if (srvrNode.Metadata != null)
            {
                foreach (NodeAttribute natt in srvrNode.Metadata)
                {
                    try
                    {
                        AttributeType atype = tsvc.GetAttributeType(natt.type.name, true);
                        natt.nodeId = existing.id;
                        natt.type   = atype;
                        attsvc.AddNodeAttribute(natt);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.StackTrace);
                    }
                }
            }
        }
コード例 #2
0
        protected void StoreDependencies(List <DataConnection> dlist)
        {
            TypeService tsvc = new TypeService();
            EdgeService esvc = new EdgeService();

            foreach (DataConnection econn in dlist)
            {
                if (econn.EdgeId == 0)
                {
                    if (econn.StartNode != null && econn.EndNode != null)
                    {
                        DataSourceNodeBase u = econn.StartNode;
                        DataSourceNodeBase v = econn.EndNode;
                        if (u.NodeIdentity != 0 && v.NodeIdentity != 0)
                        {
                            string   typename = EnumParser.GetValueName(econn.ConnectionType);
                            EdgeType etype    = tsvc.GetEdgeType(typename, true);
                            //Create an edge to added
                            Edge addEdge = new Edge
                            {
                                name        = econn.Name,
                                fromNodeId  = u.NodeIdentity,
                                toNodeId    = v.NodeIdentity,
                                description = econn.Description,
                                type        = etype
                            };
                            try
                            {
                                int edgeid = esvc.AddEdge(addEdge);
                                econn.EdgeId = edgeid;
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine(ex.StackTrace);
                            }
                        }
                    }
                }
            }
        }
コード例 #3
0
        protected override void LoadDatabaseRelationships()
        {
            if (Relationships == null)
            {
                Relationships = new List <DataConnection>();
            }
            Relationships.Clear();

            //Foreign key relationships
            LoadTableRelationships();
            LoadTriggerRelationships();
            //View, procedure, and function relationships
            DataTable refdatatable = new DataTable();

            using (SqlConnection conn = new SqlConnection(ConnectionStringBuilder.ConnectionString))
            {
                conn.Open();
                using (SqlDataAdapter sda = new SqlDataAdapter(DEPENDENCY_QUERY, conn))
                {
                    sda.Fill(refdatatable);
                }
                conn.Close();
            }
            //start parsing through the data rows
            string referencing;
            string referenced;

            foreach (DataRow refrow in refdatatable.Rows)
            {
                referencing = refrow["referencing_entity_name"].ToString();
                referenced  = refrow["referenced_entity_name"].ToString();
                DataSourceNodeBase referrer = Nodes.Where(n => n.ObjectName == referencing).FirstOrDefault();
                if (referrer != null)
                {
                    //We have a start node
                    DataConnection depconn = new DataConnection
                    {
                        ConnectionType = RecordKeys.Dependency,
                        StartNode      = null,
                        EndNode        = referrer
                    };
                    if (refrow["referenced_server_name"] == null && refrow["referenced_database_name"] == null)
                    {
                        //Dealing with an internal reference
                        depconn.StartNode = Nodes.Where(n => n.ObjectName == referenced).FirstOrDefault();
                    }
                    else
                    {
                        //Dealing with an external reference
                        string        refserver = refrow["referenced_server_name"] != null ? refrow["referenced_server_name"].ToString() : null;
                        string        refdb     = refrow["referenced_database_name"] != null ? refrow["referenced_database_name"].ToString() : null;
                        string        refschema = refrow["referenced_schema_name"] != null ? refrow["referenced_schema_name"].ToString() : null;
                        string        refobj    = refrow["referenced_entity_name"].ToString();
                        List <string> ancestry  = new List <string>();
                        if (!String.IsNullOrEmpty(refserver) && !String.IsNullOrWhiteSpace(refserver))
                        {
                            //See if such a node exists--if not, create one
                            DataSourceNodeBase servernode = Nodes.Where(n => n.Name == refserver).FirstOrDefault();
                            if (servernode == null)
                            {
                                servernode            = new GenericDataSourceNode(refserver, ConnectionStringBuilder);
                                servernode.ObjectName = refserver;
                                Nodes.Add(servernode);
                            }
                            ancestry.Add(refserver);
                        }
                        if (!String.IsNullOrEmpty(refdb) && !String.IsNullOrWhiteSpace(refdb))
                        {
                            DataSourceNodeBase dbnode = Nodes.Where(n => n.Name == refdb).FirstOrDefault();
                            if (dbnode == null)
                            {
                                dbnode            = new GenericDataSourceNode(refdb, ConnectionStringBuilder);
                                dbnode.ObjectName = refdb;
                                dbnode.Lineage    = CreateNameSpace(ancestry);
                                Nodes.Add(dbnode);
                            }
                            ancestry.Add(refdb);
                        }
                        GenericDataSourceNode extrefnode = new GenericDataSourceNode(refobj, ConnectionStringBuilder);
                        extrefnode.Schema     = refschema;
                        extrefnode.ObjectName = refobj;
                        if (ancestry.Count > 0)
                        {
                            extrefnode.Lineage = CreateNameSpace(ancestry);
                        }
                        depconn.StartNode = extrefnode;
                        Nodes.Add(extrefnode);
                    }
                    if (depconn.StartNode != null)
                    {
                        depconn.Name = String.Format("{0} => {1}", depconn.StartNode.ToString(), depconn.EndNode.ToString());
                        Relationships.Add(depconn);
                    }
                }
            }
        }