У меня есть общий репозиторий, и я хотел бы реализовать универсальный метод GetById. Это мой интерфейс репозитория:
public interface IRepository<T> where T : EntityObject
{
void Add(T entity);
void Delete(int id);
void Delete(T entity);
IEnumerable<T> Find(Expression<Func<T, bool>> predicate);
T SingleOrDefault(Expression<Func<T, bool>> predicate);
IEnumerable<T> GetAll();
T GetById(int id);
void Save();
T Single(Expression<Func<T, bool>> predicate);
}
Я использую Entity Framework 4.1. Во многих найденных мною решениях использовался абстрактный базовый класс интерфейса для класса IEntity, от которого сущности должны наследовать для выполнения поиска по идентификатору.
Вместо того, чтобы реализовывать интерфейс для всех моих классов, я пытался использовать этот фрагмент кода:
T entity = _objectSet.Where(
x => x.EntityKey.EntityKeyValues
.Select(v => v.Value.Equals(id)).Count() == 1).First();
Однако при попытке использовать метод я получаю исключение:
The specified type member 'EntityKey' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.
Может кто-нибудь сказать мне, как я могу заставить это работать?
Обновление 1
Члены _objectContext и _context объявляются следующим образом:
private readonly ObjectContext _context;
private readonly IObjectSet<T> _objectSet;
Спасибо.