使用EF7的存储库模式

时间:2016-03-21 15:18:05

标签: asp.net

我正在使用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);
    }
}

由于 赛义德

2 个答案:

答案 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

进行检查。

您必须在通用接口中添加另一个参数,而不是只有实体类型,您也可以传递主键类型,也可以使用基类