我有以下(大大删节的)通用存储库类:
public class Repository<TEntity> : IRepository<TEntity> where TEntity : class
{
private DbSet<TEntity> _entitySet;
private NewExternalsContext _dbContect;
public Repository(NewExternalsContext dbContext)
{
_dbContect = dbContext;
_entitySet = _dbContect.Set<TEntity>();
}
public virtual TEntity Get(object objectId)
{
// TODO Figure out how to use 'id' to build an Expression<Func<TEntity, bool>>.
throw new NotImplementedException();
}
public virtual TEntity FindOne(Expression<Func<TEntity, bool>> where)
{
return _entitySet.FirstOrDefault(where);
}
}
我对该public virtual TEntity Get(object objectId)
方法的问题是,因为存储库是通用的,我不知道它TEntity
有任何 id 字段,或者它被称为什么。我能做的最好的就是检查它是否有一个Id
字段,我最常用的 id 字段名称。那么,我该怎么说_entitySet.Where("Id = " + objectId)
呢?我有public virtual TEntity FindOne(Expression<Func<TEntity, bool>> where)
方法,但是当我只想通过 获取对象时id
,就像很常见的那样,我不想写出整个 lambda 表达式。