(五)Repository(仓储层)

本文介绍了Repository模式在数据访问层的作用,包括仓储层的概念、仓储创建步骤,如引入Sqlsugar.IOC包,创建基类和具体仓储实现。文章还提到了不同类型的仓储,如业务存储库和Redis仓储,并强调了仓储在减少运算和提供数据访问封装方面的重要性。
摘要由CSDN通过智能技术生成

(一)前言

Repository(仓储层):先看一下网上的解释吧

网上解释仓储:仓储(Respository)是存在于工作单元和数据库之间单独分离出来的一层,是对数据访问的封装。

各文件夹介绍:

Base:仓储基类

BusinessRepository:业务存储库

BlogRepository:文章仓储,其中的没一个文件夹都是代表数据库中的一张表,文件夹中的”I“开头代表的是仓储访问接口,没有”I“是接口实例化

RedisRepository:Redis仓储库,这里我还没写,应该说还不会写

(我看的项目中不只有这几种库,所以说还需要去学习)

(二)Repository仓储创建

1、创建仓储的项目,创建文件夹这些我就不截图了。

2、引入Sqlsugar.IOC的Nuget包,引用Entity类库。

3、基类(BaseRepository、IBaseRepository)代码。(不好截图,我直接复制到下面,看不懂的话,看看完整的项目的都有注释,当然还得研究一些Sqlsugar的一些使用。)

BaseRepository类

  public class BaseRepository<TEntity> :SimpleClient<TEntity>, IBaseRepository<TEntity> where TEntity : class, new()
    {

        /// <summary>
        /// 基类
        /// </summary>
        /// <param name="context"></param>
        public BaseRepository(ISqlSugarClient context = null) : base(context)
        {
            base.Context = DbScoped.Sugar;
            //创建数据库
            //base.Context.DbMaintenance.CreateDatabase();
            创建表
            //base.Context.CodeFirst.InitTables(
            //    typeof(BlogNews),
            //    typeof(TypeInfo),
            //    typeof(WriterInfo)
            //    );
        }
        /// <summary>
        /// 添加
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public async Task<bool> CreateAsync(TEntity entity)
        {
            return await base.InsertAsync(entity);
        }
        /// <summary>
        /// 根据ID删除
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        public async Task<bool> DeleteAsync(int Id)
        {
            return await base.DeleteByIdAsync(Id);
        }
        /// <summary>
        /// 修改
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public async Task<bool> EditAsync(TEntity entity)
        {
            return await base.UpdateAsync(entity);
        }
        /// <summary>
        /// 根据ID查询
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        public async Task<TEntity> FindAsync(int Id)
        {
            return await base.GetByIdAsync(Id);
        }
        /// <summary>
        /// 根据条件查询接口
        /// </summary>
        /// <param name="func"></param>
        /// <returns></returns>
        public async Task<TEntity> FindAsync(Expression<Func<TEntity, bool>> func)
        {
            return await base.GetSingleAsync(func);
        }
        /// <summary>
        /// 查询全部数据
        /// </summary>
        /// <returns></returns>
        public async Task<List<TEntity>> QueryAsync()
        {
            return await base.GetListAsync();
        }
        /// <summary>
        /// 自定义查询
        /// </summary>
        /// <param name="func"></param>
        /// <returns></returns>
        public async Task<List<TEntity>> QueryAsync(Expression<Func<TEntity, bool>> func)
        {
            return await base.GetListAsync(func);
        }
        /// <summary>
        /// 分页查询
        /// </summary>
        /// <param name="page"></param>
        /// <param name="size"></param>
        /// <param name="total"></param>
        /// <returns></returns>
        public async Task<List<TEntity>> QueryAsync(int page, int size, RefAsync<int> total)
        {
            return await base.Context.Queryable<TEntity>().ToPageListAsync(page, size, total);
        }
        /// <summary>
        /// 自定义分页查询
        /// </summary>
        /// <param name="func"></param>
        /// <param name="page"></param>
        /// <param name="size"></param>
        /// <param name="total"></param>
        /// <returns></returns>
        public async Task<List<TEntity>> QueryAsync(Expression<Func<TEntity, bool>> func, int page, int size, RefAsync<int> total)
        {
            return await base.Context.Queryable<TEntity>()
                .Where(func)
                .ToPageListAsync(page, size, total);
        }
    }

 IBaseRepository类

/// <summary>
    /// 数据库访问接口
    /// </summary>
    /// <typeparam name="TEntity"></typeparam>
    public interface IBaseRepository<TEntity> where  TEntity:class,new()
    {
        /// <summary>
        /// 添加接口
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        Task<bool> CreateAsync(TEntity entity);
        /// <summary>
        /// 根据ID删除接口
        /// </summary>
        /// <param name="ID"></param>
        /// <returns></returns>
        Task<bool> DeleteAsync(int ID);
        /// <summary>
        /// 修改接口
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        Task<bool> EditAsync(TEntity entity);
        /// <summary>
        /// 根据ID查询接口
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        Task<TEntity> FindAsync(int Id);
        /// <summary>
        /// 根据条件查询接口
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        Task<TEntity> FindAsync(Expression<Func<TEntity, bool>> func);
        /// <summary>
        /// 查询全部数据接口
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        Task<List<TEntity>> QueryAsync();
        /// <summary>
        /// 自定义条件查询接口
        /// </summary>
        /// <returns></returns>
        Task<List<TEntity>> QueryAsync(Expression<Func<TEntity,bool>>func);
        /// <summary>
        /// 分页查询接口
        /// </summary>
        /// <param name="func"></param>
        /// <returns></returns>
        Task<List<TEntity>> QueryAsync(int page,int size,RefAsync<int> total);
        /// <summary>
        /// 自定义条件分页查询接口
        /// </summary>
        /// <param name="func"></param>
        /// <param name="page"></param>
        /// <param name="size"></param>
        /// <param name="total"></param>
        /// <returns></returns>
        Task<List<TEntity>> QueryAsync(Expression<Func<TEntity,bool>>func,int page,int size,RefAsync<int> total);

    }

4、BlogRepository:

里面的东西怎么说呢,他主要是处理一些与基类访问到的数据不用的东西,我目前只知道的是只需要返回那些数据(目的是减少运算)。

服务层那边访问的是在个文件中对应的,而这些类有继承基类。

所以项目的代码我懒的截取处理,只需要学会继承基类就行了。

看完整的项目吧,偷懒了

5、RedisRepository:

这个里面没写东西,后续在写的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值