Exemplo n.º 1
0
        private void GetForeignKeys(IDatabase db)
        {
            DataTable keysTable = connector.GetForeignKeyConstraints();

            foreach (DataRow keyRow in keysTable.Rows)
            {
                ITable parentTable  = db.GetTable((string)keyRow["PrimaryTable"], "");
                ITable foreignTable = db.GetTable((string)keyRow["ForeignTable"], "");

                // Don't process keys of tables that the user hasn't selected
                if (parentTable == null || foreignTable == null)
                {
                    continue;
                }

                Key key = new Key
                {
                    Name          = keyRow["PrimaryKeyName"].ToString(),
                    IsUserDefined = false,
                    Keytype       = DatabaseKeyType.Foreign,
                    Parent        = parentTable
                };
                //////////////////
                key.IsUnique = connector.GetUniqueIndexes().Select(string.Format("INDEX_NAME = '{0}'", key.Name)).Length > 0;
                //foreignTable.AddKey(key);
                //////////////////

                // Get Foreign Key columns
                DataRow[] foreignKeyColumns = connector.GetForeignKeyColumns().Select(string.Format("CONSTRAINT_NAME = '{0}' AND TABLE_NAME = '{1}'", key.Name.Replace("'", "''"), foreignTable.Name));

                foreach (DataRow row in foreignKeyColumns)
                {
                    key.AddColumn((string)row["COLUMN_NAME"]);
                }

                DataRow[] keyReferencedColumnRows =
                    connector.IndexReferencedColumns.Select(string.Format("ForeignKey = '{0}'", keyRow["CONSTRAINT_NAME"]));
                DataRow firstKeyReferencedColumnRow = keyReferencedColumnRows[0];
                // Fill References
                key.ReferencedKey = foreignTable.GetKey((string)firstKeyReferencedColumnRow["ReferencedKey"]);

                parentTable.AddKey(key);
            }

            return;
        }