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); } } } }
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); } } } } } }
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); } } } }