我正在使用ASP.Net 5 / EF7开发一个新的Web应用程序。
我也在考虑存储库模式以及实体框架。
我正在寻找一些处理我的通用存储库类的建议。由于EF7还没有Find()方法,我在我的通用存储库类中实现像GetById(int id)这样的方法时遇到了一些困难。我知道可以使用FirstOrDefault()代替,但我无法访问实际的' Id'来自模特。
你能帮我找一个替代方案吗?
以下是我的通用存储库类:
public class Repository<TEntity> : IRepository<TEntity> where TEntity : class
{
protected readonly PersonDBContext _dbContext;
public Repository(PersonDBContext context)
{
_dbContext = context;
}
public IEnumerable<TEntity> GetAll()
{
return _dbContext.Set<TEntity>().ToList();
}
public TEntity Get(int? id)
{
return _dbContext.Set<TEntity>().FirstOrDefault();
}
public IEnumerable<TEntity> Find(Expression<Func<TEntity, bool>> predicate)
{
return _dbContext.Set<TEntity>().Where(predicate);
}
public void Add(TEntity entity)
{
_dbContext.Set<TEntity>().Add(entity);
}
public void Remove(TEntity entity)
{
_dbContext.Set<TEntity>().Remove(entity);
}
}
由于 赛义德
答案 0 :(得分:1)
这是你可以尝试的东西。
根据您的评论,您不知道模型的实际ID,然后像使用Find
一样使用表达式来获取您要查找的实体。
public class Repository<TEntity> : IRepository<TEntity> where TEntity : class {
//.....
public TEntity Get(Expression<Func<TEntity, bool>> predicate)
{
return _dbContext.Set<TEntity>().FirstOrDefault(predicate);
}
//.....
}
答案 1 :(得分:1)
我在博客中创建了一篇文章,解释了如何创建通用存储库,您可以在Generic Repository using EntityFramework
进行检查。您必须在通用接口中添加另一个参数,而不是只有实体类型,您也可以传递主键类型,也可以使用基类