public Relationship CreateRelationshipTo(ITable targetTable) { var newRel = new RelationshipImpl(); newRel.PrimaryTable = this; newRel.ForeignTable = targetTable; newRel.PrimaryKey = new Key(Guid.NewGuid().ToString()) { IsUserDefined = true, Keytype = DatabaseKeyType.Primary }; newRel.ForeignKey = new Key(Guid.NewGuid().ToString()) { IsUserDefined = true, Keytype = DatabaseKeyType.Foreign }; AddKey(newRel.PrimaryKey); targetTable.AddKey(newRel.ForeignKey); newRel.PrimaryKey.Parent = this; newRel.ForeignKey.Parent = targetTable; newRel.Database = Database; Database.AddRelationship(newRel); AddRelationship(newRel); targetTable.AddRelationship(newRel); return(newRel); }
public void AddThisTo(ITable source, ITable target) { PrimaryTable = source; ForeignTable = target; Database = source.Database; source.AddRelationship(this); target.AddRelationship(this); Database.AddRelationship(this); }
public void CreateRelationships(Table table) { foreach (Key key in table.Keys) { try { if (key.Keytype != DatabaseKeyType.Foreign) { continue; } if (key.ReferencedKey == null) { //continue; throw new DatabaseSchemaInvalidException(string.Format("Foreign key \"{0}\" on table \"{1}\" has no matching key on the referenced table.", key.Name, table.Name)); } if (key.Columns.Count != key.ReferencedKey.Columns.Count) { throw new DatabaseSchemaInvalidException(string.Format("Foreign key \"{0}\" has {2} columns than its referenced key \"{1}\"", key.Name, key.ReferencedKey.Name, (key.Columns.Count > key.ReferencedKey.Columns.Count ? "more" : "less"))); } //if(key.ReferencedKey.Keytype != DatabaseKeyType.Primary) //{ // throw new DatabaseSchemaInvalidException(string.Format("Foreign key \"{0}\" refers to a non-primary key \"{1}\". The key is of type {2}", key.Name, key.ReferencedKey.Name, key.ReferencedKey.Keytype)); //} ITable referencedTable = key.ReferencedKey.Parent; Relationship rel = new RelationshipImpl { PrimaryCardinality = key.IsUnique ? Cardinality.One : Cardinality.Many, ForeignCardinality = key.ReferencedKey.IsUnique ? Cardinality.One : Cardinality.Many, PrimaryTable = referencedTable, ForeignTable = key.Parent, Name = key.Name, PrimaryKey = key.ReferencedKey, ForeignKey = key }; table.AddRelationship(rel); referencedTable.AddRelationship(rel); } catch (Exception e) { if (LogErrors) { Errors.Add(e); } else { throw; } } } }