Beispiel #1
0
        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;
                    }
                }
            }
        }