【发布时间】:2014-02-19 15:46:32
【问题描述】:
我有一个通用存储库,并希望实现一个通用 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);
}
我正在使用实体框架 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;
谢谢。
【问题讨论】:
-
检查这个答案:stackoverflow.com/questions/5273416/… 它包含您正在寻找的内容。
标签: entity-framework entity-framework-4 repository-pattern