У меня есть общий репозиторий и я хотел бы реализовать универсальный метод 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, от которого сущности должны наследовать для выполнения поиска Id.
Вместо того, чтобы реализовывать интерфейс для всех моих классовЯ пытался использовать этот бит кода:
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;
Спасибо.