存储库模式似乎缺乏范围。如果我有更多要查询怎么办?

疯人院

我应该只使用这5种方法吗?或者我的存储库应该显示我需要的所有 sql 方法。也许我误解了这些例子。我应该 FindByID 和 FindAll 吗?例如,如果我有 5 个下拉菜单。我有5个方法,或者我可能有一个方法,5个查询,返回1个表并绑定到0-4个表。

我试过的,是网上的几节课和几篇文章,我仍然觉得这些例子过于简化了。或者,我正在编写太多方法来查询数据库。顺便说一句,我正在从线性开发转向存储库和工厂。所以,我的转变是基于理解这一点,然后我将转向 EF 和 MVC。

public interface IRepository<T> where T: IEntity
{

    void Insert(Student student);
    void Delete(Student student);
    void Update(Student student);
    Student GetById(Student RollNo);
    IQueryable<Student> FetchAll();

}
纳迪姆·库里

对于在您的存储库上具有一组标准 CRUD 操作的简单实体和聚合来说很有意义。但是,对于标准较低的聚合和复杂的操作,实现这些常见操作没有意义。

例如:假设在您想将您的学生添加到数据库之前,您需要对该学生进行一些复杂的验证并将这些详细信息隐藏在客户端上。

最好,我喜欢直接使用 DBContext。它给了我更多的自由空间来做我需要做的任何事情,而不必考虑将那个方法添加到接口中,然后去实现它。无论如何,如果您想使用存储库模式。我建议使用通用的,如下所示:

 public class Repository<TEntity> : IRepository<TEntity> where TEntity : class, IEntity
{
    private readonly CrudContext _context;
    private readonly DbSet<TEntity> _dbSet;
    public Repository(CrudContext context)
    {
        this._context = context;
        this._dbSet = context.Set<TEntity>();
    }

    public IEnumerable<TEntity> List()
    {
        return _dbSet.ToList();
    }

    public TEntity GetById(int id)
    {
        return _dbSet.Find(id);
    }

    public void Insert(TEntity entity)
    {
        _dbSet.Add(entity);
        _context.SaveChanges();
    }

    public void Update(TEntity entity)
    {
        _dbSet.Attach(entity);
        _context.Entry(entity).State = EntityState.Modified;
        _context.SaveChanges();
    }

    public void Delete(int id)
    {
        var entityToDelete = _dbSet.Find(id);
        _dbSet.Remove(entityToDelete);
        _context.SaveChanges();
    }
}

如果涉及到我的偏好,我要么直接在依赖类中使用dbcontext,要么创建一个名为的接口,IEntityInserter并且对于每个具有过多插入逻辑的记录类型或模型,我将创建一个名为的实现

StudentBasedEntityInserter : IEntityInserter<Student> {

       public void Insert(Student @student){}
}

并将该 IEntityInserter 注入任何依赖类。

最后,在那个激烈的话题中没有正确的答案,有些人会同意我的方法,有些人不会。希望它有帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用 set 来存储唯一值但如果我的数组中有更多数据怎么办

来自分类Dev

如果存储库/ PPA没有发布文件,该怎么办?

来自分类Dev

如果我有几个重叠的QTimer,该怎么办

来自分类Dev

如果我没有git lfs锁怎么办

来自分类Dev

如果我没有bashrc怎么办?

来自分类Dev

如果我的项目有多个 html 页面怎么办

来自分类Dev

如果github上某个存储库的所有者停止了某个项目的工作,但是我想为它做贡献怎么办?

来自分类Dev

如果我跑得太久怎么办?

来自分类Dev

Next.js:如果子进程没有任何数据要返回怎么办?

来自分类Dev

如果路由器似乎无法启动怎么办?

来自分类Dev

如果更改git存储库的路径名怎么办?

来自分类Dev

如果我在存储过程中无限循环,该怎么办?

来自分类Dev

如果我们将类的实例存储在树集中会怎么办?

来自分类Dev

Mysql更新查询,如果值未更改怎么办?我该如何检查?

来自分类Dev

Mysql更新查询,如果值未更改怎么办?我该如何检查?

来自分类Dev

如果我更改SQLite数据库名称怎么办?

来自分类Dev

如果我想在React中使用AOS这样的JavaScript库,该怎么办?

来自分类Dev

如果我的数据库服务器磁盘空间不足怎么办?

来自分类Dev

如果我更改SQLite数据库名称怎么办?

来自分类Dev

如果我们要输出所有结果,而不仅仅是SQL联合中的不同结果,该怎么办?

来自分类Dev

Angular指令-如果未设置范围怎么办?

来自分类Dev

我的Nvidia 8400GS是否超频了?如果没有,我该怎么办?

来自分类Dev

如果我有 2 个相等的平均值,我该怎么办?

来自分类Dev

我的数据库有什么问题?我应该怎么办?

来自分类Dev

这些未标记的存储库怎么办?

来自分类Dev

无法从远程存储库读取错误。怎么办?

来自分类Dev

Django分页。如果我有一百万行怎么办?

来自分类Dev

如果我在git checkout [commit]的末尾没有加点怎么办?

来自分类Dev

如果没有META-INF文件夹,我的世界怎么办?

Related 相关文章

  1. 1

    使用 set 来存储唯一值但如果我的数组中有更多数据怎么办

  2. 2

    如果存储库/ PPA没有发布文件,该怎么办?

  3. 3

    如果我有几个重叠的QTimer,该怎么办

  4. 4

    如果我没有git lfs锁怎么办

  5. 5

    如果我没有bashrc怎么办?

  6. 6

    如果我的项目有多个 html 页面怎么办

  7. 7

    如果github上某个存储库的所有者停止了某个项目的工作,但是我想为它做贡献怎么办?

  8. 8

    如果我跑得太久怎么办?

  9. 9

    Next.js:如果子进程没有任何数据要返回怎么办?

  10. 10

    如果路由器似乎无法启动怎么办?

  11. 11

    如果更改git存储库的路径名怎么办?

  12. 12

    如果我在存储过程中无限循环,该怎么办?

  13. 13

    如果我们将类的实例存储在树集中会怎么办?

  14. 14

    Mysql更新查询,如果值未更改怎么办?我该如何检查?

  15. 15

    Mysql更新查询,如果值未更改怎么办?我该如何检查?

  16. 16

    如果我更改SQLite数据库名称怎么办?

  17. 17

    如果我想在React中使用AOS这样的JavaScript库,该怎么办?

  18. 18

    如果我的数据库服务器磁盘空间不足怎么办?

  19. 19

    如果我更改SQLite数据库名称怎么办?

  20. 20

    如果我们要输出所有结果,而不仅仅是SQL联合中的不同结果,该怎么办?

  21. 21

    Angular指令-如果未设置范围怎么办?

  22. 22

    我的Nvidia 8400GS是否超频了?如果没有,我该怎么办?

  23. 23

    如果我有 2 个相等的平均值,我该怎么办?

  24. 24

    我的数据库有什么问题?我应该怎么办?

  25. 25

    这些未标记的存储库怎么办?

  26. 26

    无法从远程存储库读取错误。怎么办?

  27. 27

    Django分页。如果我有一百万行怎么办?

  28. 28

    如果我在git checkout [commit]的末尾没有加点怎么办?

  29. 29

    如果没有META-INF文件夹,我的世界怎么办?

热门标签

归档