private void BuildForeignKeysCache() { _fkCache = new Dictionary<string, FKCacheEntry>(); foreach (var tbl in Tables) { foreach (var cnst in tbl.Constraints) { if (cnst is ForeignKeyConstraint == false) continue; var fk = cnst as ForeignKeyConstraint; foreach (var col in fk.RefColumns) { var refTable = Tables.Find(t => t.Name == fk.RefTable); if (refTable == null) continue; var key = string.Format("{0}_{1}", refTable.Name, col); if (!_fkCache.ContainsKey(key)) { var entry = new FKCacheEntry(); entry.Add(fk, tbl); _fkCache.Add(key, entry); } else _fkCache[key].Add(fk, tbl); } } } }