Я пишу метод расширения IQueryable<T>
и хотел бы получить внешние ключи свойств навигации T
. Я понял, что могу получить к ним доступ через IModel.FindEntityType(T).GetNavigations()
, вопрос в том, как лучше всего получить доступ к IModel
, сохраняя метод максимально простым.
В данный момент метод выглядит что-то вроде этого:
public static IQueryable<TQuery> DoMagic<TQuery>(this IQueryable<TQuery> query, IModel model)
{
var entity = model.FindEntityType(entityType);
var navigationProperties = entity.GetNavigations();
...
}
Мне бы очень хотелось, если бы мне не нужно было передавать IModel
в качестве аргумента, подобного этому:
public static IQueryable<TQuery> DoMagic<TQuery>(this IQueryable<TQuery> query)
{
var entity = Model.FindEntityType(entityType);
var navigationProperties = entity.GetNavigations();
...
}
Я рассмотрел вопрос о добавлении IServiceCollection
метода расширения и передачи DbContext
и установки IModel
в качестве свойства stati c в метод расширения IQueryable<T>
. Проблема в том, что он ограничивает меня одним DbContext
.
. Я также искал возможность добавить метод расширения к DbContextOptionsBuilder
, но не нашел лучшего способа добиться того, что Я хочу сделать так.
Может быть, есть другие способы получить доступ к внешним ключам? Любая помощь приветствуется!
Редактировать
Из свойств навигации я хочу получить доступ к свойству ForeignKey
, чтобы узнать, какое свойство используется для разрешения свойства навигации , Что-то вроде:
navigationProperties.ToList().Select(x => x.ForeignKey);