コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }