У меня сложная проблема, когда я хотел бы использовать отражение в моем отображении Entity Framework для поиска всех внешних ключей, которые ссылаются на таблицу, и мне нужны имена столбцов, которые являются внешними ключами.
Согласно другому посту на SO , я легко могу найти свойства навигации в таблице через отражение. Но это не дает мне имя свойства или столбца, который содержит значение внешнего ключа.
Причина, по которой я пытаюсь это сделать, заключается в том, что у меня есть большое количество таблиц (около 40), которые ссылаются на одну таблицу элементов. Допустим, пользователь вводит новое значение в таблицу элементов под названием «Andew», а позже администратор замечает, что на самом деле это просто опечатка для уже существующего элемента «Andrew». Теперь я хочу найти все ссылки на «Andew» и изменить эти ссылки на «Андрей». Я бы предпочел сделать это эффективно, поэтому использование свойств обратной навигации будет слишком медленным, так как вы должны загрузить значения перед их изменением. Что я хотел бы сделать, так это уметь отображать список таблиц и столбцов, а затем вводить команды обновления непосредственно в базу данных. Это будет выглядеть примерно так:
var command = String.Format("UPDATE [{0}] SET [{1}] = {{1}} WHERE [{1}] = {{0}}; ", fk.FromTableName, fk.FromColumnName);
dataContext.ExecuteStoreCommand(command, new Object[] { oldID, newID });
В LINQ to SQL это было на самом деле довольно просто ... 20 строк размышлений об автоматически сгенерированном коде LINQ, и я закончил, но мы недавно перешли на EF, и я не могу найти имена столбцов внешнего ключа через EF.
Упрощенный пример того, что я ищу: если у меня есть объект с именем Employee со свойством навигации, называемым Manager, и внешним ключом ManagerID, я хочу знать, что Manager - это мое свойство навигации, а базовое хранилище - это свойство ManagerID. Я хочу сделать это строго с помощью рефлексии или метаданных, чтобы из него можно было построить динамический запрос.