/// <summary> /// Citation Graph /// </summary> /// <param name="connection">connection</param> /// <param name="databaseName">database name</param> /// <author>FreshMan</author> /// <creattime>2017-09-06</creattime> private Dictionary <string, List <string> > GetReferencedMap(IDbConnection connection, string databaseName) { if (_tableRefencedModelDictionary.Any()) { return(_tableRefencedModelDictionary); } string sqlCmd = $@"SELECT CONSTRAINT_NAME as ForeignKey, COLUMN_NAME as ForeignKeyCell, REFERENCED_COLUMN_NAME as ReferencedCell, REFERENCED_TABLE_NAME as ReferencedTableName, TABLE_NAME as TableName FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = '{0}' AND REFERENCED_COLUMN_NAME IS NOT NULL "; var resulteInfo = new List <ReferencedModel>(); if (string.IsNullOrEmpty(databaseName)) { return(null); } sqlCmd = string.Format(sqlCmd, databaseName); var dr = connection.ExecuteReader(sqlCmd); while (dr.Read()) { var tempModel = new ReferencedModel { ForeignKey = (string)dr["ForeignKey"], ForeignKeyCell = (string)dr["ForeignKeyCell"], ReferencedCell = (string)dr["ReferencedCell"], ReferencedTableName = (string)dr["ReferencedTableName"], TableName = (string)dr["TableName"] }; resulteInfo.Add(tempModel); if (_tableRefencedModelDictionary.ContainsKey(tempModel.ReferencedTableName)) { continue; } _tableRefencedModelDictionary.Add(tempModel.ReferencedTableName, new List <string>()); } dr.Close(); //oriented graph foreach (var rowModel in resulteInfo.Where(rowModel => rowModel.ReferencedTableName != rowModel.TableName)) { _tableRefencedModelDictionary[rowModel.ReferencedTableName].Add(rowModel.TableName); } return(_tableRefencedModelDictionary); }
/// <summary> /// Citation Graph /// </summary> /// <param name="connection">connection</param> /// <author>FreshMan</author> /// <creattime>2017-09-06</creattime> private Dictionary <string, List <string> > GetReferencedMap(IDbConnection connection) { if (_tableRefencedModelDictionary.Any()) { return(_tableRefencedModelDictionary); } string sqlCmd = $@" SELECT object_name(constraint_object_id) ForeignKey, object_name(parent_object_id) TableName, col_name( parent_object_id, parent_column_id ) ForeignKeyCell, object_name(referenced_object_id) ReferencedTableName, col_name( referenced_object_id, referenced_column_id ) ReferencedCell FROM sys.foreign_key_columns "; var resulteInfo = new List <ReferencedModel>(); var dr = connection.ExecuteReader(sqlCmd); while (dr.Read()) { var tempModel = new ReferencedModel { ForeignKey = (string)dr["ForeignKey"], ForeignKeyCell = (string)dr["ForeignKeyCell"], ReferencedCell = (string)dr["ReferencedCell"], ReferencedTableName = (string)dr["ReferencedTableName"], TableName = (string)dr["TableName"] }; resulteInfo.Add(tempModel); if (_tableRefencedModelDictionary.ContainsKey(tempModel.ReferencedTableName)) { continue; } _tableRefencedModelDictionary.Add(tempModel.ReferencedTableName, new List <string>()); } dr.Close(); //oriented graph foreach (var rowModel in resulteInfo.Where(rowModel => rowModel.ReferencedTableName != rowModel.TableName)) { _tableRefencedModelDictionary[rowModel.ReferencedTableName].Add(rowModel.TableName); } return(_tableRefencedModelDictionary); }