私は次の(非常に簡略化された)ジェネリックリポジトリクラスを持っています:
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);
}
}
このメソッドに関する私の問題は、リポジトリが汎用であるため、 idフィールド、またはそれが何と呼ばれるかがpublic virtual TEntity Get(object objectId)
わからないことです。私ができる最善のことは、idフィールドの最も一般的な名前であるフィールドTEntity
があるかどうかを確認することです。Id
それでは、私はどのように言うの_entitySet.Where("Id = " + objectId)
ですか?メソッドはありますが、よくあるpublic virtual TEntity FindOne(Expression<Func<TEntity, bool>> where)
ことですが、オブジェクトを取得したいだけの場合はid
、ラムダ式全体を書きたくありません。