public void Add(BimRelationship relationShipRegistration) { if (!_fromTo.ContainsKey(relationShipRegistration.FromTableSchemaAndTableName)) { _fromTo.Add(relationShipRegistration.FromTableSchemaAndTableName, new List <BimRelationship>()); } _fromTo[relationShipRegistration.FromTableSchemaAndTableName].Add(relationShipRegistration); }
public bool Contains(BimRelationship bimRelationship) { if (!_fromTo.Keys.Contains(bimRelationship.FromTableSchemaAndTableName.ToString())) { return(false); } var tos = _fromTo[bimRelationship.FromTableSchemaAndTableName]; return(tos.Any(r => r.FromColumn.Name == bimRelationship.FromColumn.Name && r.ToKey == bimRelationship.ToKey)); }
private static Relationship GenerateRelationship(BimRelationship rr) { var relation = new Relationship { FromTable = GetBimTableName(rr.FromTableSchemaAndTableName), FromColumn = rr.FromColumn.Name, ToTable = GetBimTableName(rr.ToTableSchemaAndTableName), ToColumn = rr.ToColumnName, Name = Guid.NewGuid().ToString() }; return(relation); }
private void GatherReferencedTablesByFK(RelationShipRegistrations relationShipRegistrations, SqlTable sqlTable) { // TODO order of relationships from FKs should follow column (declaration) order. var fks = sqlTable.Properties.OfType <ForeignKey>(); foreach (var fk in fks) { var firstColumnMap = fk.ForeignKeyColumns[0]; var bimRelationship = new BimRelationship(firstColumnMap.ForeignKeyColumn, firstColumnMap.ReferredColumn.Table.SchemaAndTableName, firstColumnMap.ReferredColumn.Name); if (relationShipRegistrations.Contains(bimRelationship)) { continue; } relationShipRegistrations.Add(new BimRelationship(firstColumnMap.ForeignKeyColumn, firstColumnMap.ReferredColumn.Table.SchemaAndTableName, firstColumnMap.ReferredColumn.Name)); GatherReferencedTablesByFK(relationShipRegistrations, fk.ReferredTable); } }
private void CreateTableCopyForReference(BimRelationship rr, BimGeneratorModel model, int i) { var dd = rr.FromColumn.Table.DatabaseDefinition; var toSqlTable = dd.GetTable(rr.ToTableSchemaAndTableName); var suffix = " " + i.ToString("D", CultureInfo.InvariantCulture); if (rr.RelationshipIdentifier != null) { suffix = " " + rr.RelationshipIdentifier; } var copyTableName = GetBimTableName(toSqlTable.SchemaAndTableName) + suffix; var copySchemaAndTableName = new SchemaAndTableName(toSqlTable.SchemaAndTableName.Schema, toSqlTable.SchemaAndTableName.TableName + suffix); rr.ToTableSchemaAndTableName = copySchemaAndTableName; if (!model.Tables.Any(t => t.Name == copyTableName)) { Context.Logger.Log(LogSeverity.Information, "Table {TableName} COPIED to bim model, multiple references from {FromTable}", "BimGenerator", copySchemaAndTableName, rr.FromColumn.Table.SchemaAndTableName); model.Tables.Add(GenerateTable(toSqlTable, copyTableName)); } }