public ExplorerItem EmitCodeAndGetExplorerItemTree(TypeBuilder dataContextTypeBuilder) { var query = SqlHelper.LoadSql("QueryTables.sql"); var tables = connection.Query(query); var explorerItems = new List<ExplorerItem>(); foreach (var group in tables.GroupBy(t => t.TableCatalog)) { var databaseName = group.Key; var preparedTables = new List<TableData>(); foreach (var table in group.OrderBy(t => t.TableName)) { var unmodifiedTableName = (string)table.TableName; var tableName = cxInfo.GetTableName(unmodifiedTableName); var explorerItem = new ExplorerItem(tableName, ExplorerItemKind.QueryableObject, ExplorerIcon.Table) { IsEnumerable = true, Children = new List<ExplorerItem>(), DragText = tableName, SqlName = $"\"{unmodifiedTableName}\"" }; var tableData = PrepareTableEntity(cxInfo, moduleBuilder, connection, nameSpace, databaseName, unmodifiedTableName, explorerItem); preparedTables.Add(tableData); } // build the associations before the types are created BuildAssociations(connection, preparedTables); foreach (var tableData in preparedTables) { dataContextTypeBuilder.CreateAndAddType(tableData); explorerItems.Add(tableData.ExplorerItem); } } return new ExplorerItem("Tables", ExplorerItemKind.Category, ExplorerIcon.Table) { IsEnumerable = true, Children = explorerItems }; }