private AtomReference ReferencesOthers(Database db, Column column, Table table) { var indexes = table.ForeignKeys.Cast <ForeignKey>() .ToList(); var index = indexes.FirstOrDefault(i => i.Columns.Contains(column.Name)); if (index != null && index.ReferencedTable != table.Name) { var reference = new AtomReference { Name = index.ReferencedTable, Schema = index.ReferencedTableSchema != table.Schema ? index.ReferencedTableSchema : null }; // find the related column Log.Debug("Looking for key {ReferencedKey} {ReferencedTable} {TableName} {ColumnName}", index.ReferencedKey, index.ReferencedTable, table.Name, column.Name); var referencedKey = db.Tables.Cast <Table>() .First(i => i.Schema == index.ReferencedTableSchema && i.Name == index.ReferencedTable) .Indexes.Cast <Index>() .First(i => i.Name == index.ReferencedKey) .IndexedColumns.Cast <IndexedColumn>() .FirstOrDefault(); if (referencedKey != null && (referencedKey.Name != column.Name)) { reference.Member = referencedKey.Name; } return(reference); } return(null); }
public SearchBySproc(AtomModel atomModel, AtomReference searchBy, IEnumerable <AtomModel> allAtoms) : base(atomModel) { _searchBy = searchBy; _allAtoms = allAtoms; }