Я пытаюсь реализовать универсальный класс, который будет взаимодействовать с универсальным репозиторием, и все в порядке, за исключением случаев, когда мне приходится иметь дело с извлечением объектов из репозитория.
Я собираюсьВ общем классе есть виртуальный метод, который получит int
, и я хочу использовать этот int
для формирования запроса к хранилищу, которое получает объекты по их первичному ключу.У меня есть чувство, что мне нужно работать со свойством EntityKey
в EF, но я не совсем уверен, как.
В любом случае, вот что я пытаюсь сделать в коде, я надеюсь, что у кого-то будут предложения о том, какчтобы выполнить то, что я хочу:
public virtual T Get(int PrimaryKey) {
this.Repository.Select(
t =>
(t.PRIMARYKEY == PrimaryKey)).Single();
}
Я хочу расширить этот класс более специализированными классами, но, поскольку большинство из них получают свои объекты только при запросе PK, это значит, что мне нужен базовый методкоторый может это сделать.
Заранее благодарен за любые предложения!
ОБНОВЛЕНИЕ
Итак, вот где я получил с отражением, и ясомневаюсь, что это правильный путь, но он несколько работает ... Я получаю NotSupportedException
с сообщением LINQ to Entities не распознает метод 'System.Object GetValue (System.Object, System.Object []), и этот метод нельзя преобразовать в выражение хранилища. .Хотя я понимаю, что он говорит и почему он говорит, я не уверен, как преодолеть это, когда мой код выглядит так:
private readonly string TEntityName = typeof(T).Name;
public virtual T Get(
int PrimaryKey) {
return this.Repository.Select(
t =>
(((int)t.GetType().GetProperties().Single(
p =>
(p.Name == (this.TEntityName + "Id"))).GetValue(t, null)) == PrimaryKey)).Single();
}
Надеюсь, что кто-то, кто знает, как использовать отражение, в отличие от меня, можетНаправь меня в правильном направлении.Спасибо!