public static (TableDto[], ForeignKeyDto[]) ReadTablesAndForeignKeysFromDb(string connectionString)
        {
            List <ColumnDto>     columns     = new List <ColumnDto>();
            List <ForeignKeyDto> foreignKeys = new List <ForeignKeyDto>();

            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                using (SqlCommand cmd = new SqlCommand(ColumnsQuery, connection))
                {
                    connection.Open();
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            string tableName       = (string)reader["table_name"];
                            string name            = (string)reader["column_name"];
                            int    ordinalPosition = int.Parse(reader["ordinal_position"].ToString(), CultureInfo.InvariantCulture);
                            string sqlType         = (string)reader["DATA_TYPE"];

                            ColumnDto columnDto = new ColumnDto()
                            {
                                Name            = name,
                                OrdinalPosition = ordinalPosition,
                                SqlType         = sqlType,
                                TableName       = tableName
                            };

                            columns.Add(columnDto);
                        }
                    }
                }

                using (SqlCommand cmd = new SqlCommand(ForeignKeysQuery, connection))
                {
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            string sourceTableName       = (string)reader["source_table"];
                            string sourceColumnName      = (string)reader["source_column"];
                            string destinationTableName  = (string)reader["destination_table"];
                            string destinationColumnName = (string)reader["destination_column"];

                            ForeignKeyDto fk = new ForeignKeyDto(sourceTableName, sourceColumnName, destinationTableName, destinationColumnName);

                            foreignKeys.Add(fk);
                        }
                    }
                }
            }

            Dictionary <string, TableDto> name2table = new Dictionary <string, TableDto>();
            List <TableDto> tables = new List <TableDto>();

            foreach (ColumnDto column in columns)
            {
                if (!name2table.ContainsKey(column.TableName))
                {
                    name2table.Add(column.TableName, new TableDto(column.TableName));
                }

                TableDto table = name2table[column.TableName];
                table.Add(column);
                tables.Add(table);
            }

            return(tables.ToArray(), foreignKeys.ToArray());
        }
예제 #2
0
 internal void Add(ColumnDto column)
 {
     this.columns.Add(column.OrdinalPosition, column);
 }