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; }