Ejemplo n.º 1
0
        public void Add(BimRelationship relationShipRegistration)
        {
            if (!_fromTo.ContainsKey(relationShipRegistration.FromTableSchemaAndTableName))
            {
                _fromTo.Add(relationShipRegistration.FromTableSchemaAndTableName, new List <BimRelationship>());
            }

            _fromTo[relationShipRegistration.FromTableSchemaAndTableName].Add(relationShipRegistration);
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
            }
        }
Ejemplo n.º 5
0
        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));
            }
        }