Пример #1
0
        private static Table ParseTable(Database database, information_schema information_Schema, TABLES dbTables)
        {
            var table = new Table();

            table.Database = database;
            table.DbName   = dbTables.TABLE_NAME;
            table.Type     = dbTables.TABLE_TYPE == "BASE TABLE" ? TableType.Table : TableType.View;
            table.Model    = new Model
            {
                CsTypeName = dbTables.TABLE_NAME
            };

            table.Columns = information_Schema
                            .COLUMNS.Where(x => x.TABLE_SCHEMA == database.Name && x.TABLE_NAME == table.DbName)
                            .AsEnumerable()
                            .Select(x => ParseColumn(table, x))
                            .ToList();

            return(table);
        }
Пример #2
0
        public static DatabaseMetadata ParseDatabase(string dbName, information_schema information_Schema)
        {
            var database = new DatabaseMetadata(dbName);

            database.Tables = information_Schema
                              .TABLES.Where(x => x.TABLE_SCHEMA == dbName)
                              .AsEnumerable()
                              .Select(x => ParseTable(database, information_Schema, x))
                              .ToList();

            foreach (var key in information_Schema
                     .KEY_COLUMN_USAGE.Where(x => x.TABLE_SCHEMA == dbName && x.REFERENCED_COLUMN_NAME != null))
            {
                var relation = new Relation
                {
                    Constraint = key.CONSTRAINT_NAME,
                    Type       = RelationType.OneToMany
                };

                var foreignKeyColumn = database
                                       .Tables.Single(x => x.DbName == key.TABLE_NAME)
                                       .Columns.Single(x => x.DbName == key.COLUMN_NAME);

                var candidateKeyColumn = database
                                         .Tables.Single(x => x.DbName == key.REFERENCED_TABLE_NAME)
                                         .Columns.Single(x => x.DbName == key.REFERENCED_COLUMN_NAME);

                relation.ForeignKey   = CreateRelationPart(relation, foreignKeyColumn, RelationPartType.ForeignKey);
                relation.CandidateKey = CreateRelationPart(relation, candidateKeyColumn, RelationPartType.CandidateKey);
            }

            database.Relations = database
                                 .Tables.SelectMany(x => x.Columns.SelectMany(y => y.RelationParts.Select(z => z.Relation)))
                                 .Distinct()
                                 .ToList();

            return(database);
        }