Имам общо хранилище и бих искал да внедря общ метод 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;
Благодаря.