仓储(Respository)是对数据库访问的一个封装

解决方案新建Respository文件夹,新建类库Web.Core.IRepository,Web.Core.Repository

解决方案新建Services文件夹,新建类库Web.Core.IServices,Web.Core.Services

在类库Web.Core.Model下面新建Entity文件夹

.Net Core6.0 WebAPI项目框架搭建六:仓储模式+导入SqlSuagr_Web

SqlSugar是国人开发者开发的一款高性能、轻量级 ORM框架,官网SqlSugar ORM 5.X 官网 、文档、教程 - SqlSugar 5x - .NET果糖网

Respository层和Model层引入SqlSugarCore

.Net Core6.0 WebAPI项目框架搭建六:仓储模式+导入SqlSuagr_.netcore_02

 Repository层新建suger文件夹,

新建BaseDBConfig.cs 数据库连接字符串

public class BaseDBConfig
    {
        /// <summary>
        /// 数据库连接字符串
        /// </summary>
        public static string ConnectionString { get; set; }

    }

新建DBConext.cs帮助类

public class DbContext<T> where T : class, new()
    {
        public DbContext()
        {
            Db = new SqlSugarClient(new ConnectionConfig()
            {
                ConnectionString = BaseDBConfig.ConnectionString,
                DbType = DbType.SqlServer,
                InitKeyType = InitKeyType.Attribute,//从特性读取主键和自增列信息
                IsAutoCloseConnection = true,//开启自动释放模式和EF原理一样我就不多解释了

            });
            //调式代码 用来打印SQL 
            Db.Aop.OnLogExecuting = (sql, pars) =>
            {
                Console.WriteLine(sql + "\r\n" +
                    Db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
                Console.WriteLine();
            };

        }
        //注意:不能写成静态的
        public SqlSugarClient Db;//用来处理事务多表查询和复杂的操作
        public SimpleClient<T> CurrentDb { get { return new SimpleClient<T>(Db); } }//用来操作当前表的数据




    }

 在program.cs里面增加读取appsettings.json中保存的数据库连接字符串

//数据库配置
BaseDBConfig.ConnectionString = builder.Configuration.GetSection("AppSettings:ConnectionString").Value;

IRepository 层中添加Base文件夹,并添加基类接口 IBaseRepository.cs

/// <summary>
    /// 基类接口,其他接口继承该接口
    /// </summary>
    /// <typeparam name="TEntity"></typeparam>
   public interface IBaseRepository<TEntity> where TEntity : class
    {
        /// <summary>
        /// 根据ID列表查询
        /// </summary>
        /// <param name="objId"></param>
        /// <returns></returns>
        Task<TEntity> QueryByID(object objId);

        /// <summary>
        /// 查询所有数据
        /// </summary>
        /// <param name="objId"></param>
        /// <returns></returns>
        Task<List<TEntity>> Query();

        /// <summary>
        /// 添加
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        Task<long> Add(TEntity model);

        /// <summary>
        /// 修改
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        Task<bool> Update(TEntity model);

        /// <summary>
        /// 根据id列表删除
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        Task<bool> DeleteByIds(object[] ids);

        /// <summary>
        /// 根据ID删除
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        Task<bool> DeleteById(object id);

    }

Repository 层中,添加Base文件夹,并添加 BaseRepository.cs 基类

public class BaseRepository<TEntity> : DbContext<TEntity>, IBaseRepository<TEntity> where TEntity : class, new()
    {
        /// <summary>
        /// 写入实体数据
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public async Task<long> Add(TEntity model)
        {
            var i = await Task.Run(() => Db.Insertable(model).ExecuteCommand());
            //返回的i是long类型,这里你可以根据你的业务需要进行处理
            return i;
        }

        /// <summary>
        /// 根据ID列表删除
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        public async Task<bool> DeleteByIds(object[] ids)
        {
            var i = await Task.Run(() => Db.Deleteable<TEntity>().In(ids).ExecuteCommand());
            return i > 0;
        }

        /// <summary>
        /// 根据ID删除
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        public async Task<bool> DeleteById(object id)
        {
            var i = await Task.Run(() => Db.Deleteable<TEntity>().In(id).ExecuteCommand());
            return i > 0;
        }
        /// <summary>
        /// 根据ID查询一条数据
        /// </summary>
        /// <param name="objId"></param>
        /// <returns></returns>
        public async Task<TEntity> QueryByID(object objId)
        {
            return await Task.Run(() => Db.Queryable<TEntity>().InSingle(objId));
        }

        /// <summary>
        /// 查询所有数据
        /// </summary>
        /// <param name="objId"></param>
        /// <returns></returns>
        public async Task<List<TEntity>> Query()
        {
            return await Task.Run(() => Db.Queryable<TEntity>().ToListAsync());
        }
        /// <summary>
        /// 更新实体数据
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public async Task<bool> Update(TEntity model)
        {
            //这种方式会以主键为条件
            var i = await Task.Run(() => Db.Updateable(model).ExecuteCommand());
            return i > 0;
        }
    }

IService 层中添加Base文件夹,并添加接口 IBaseService.cs。

public interface IBaseServices<TEntity> where TEntity : class
    {
        /// <summary>
        /// 根据ID列表删除
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        Task<bool> DeleteByIds(object[] ids);

        /// <summary>
        /// 根据ID删除
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        Task<bool> DeleteById(string id);
        /// <summary>
        /// 根据ID查询
        /// </summary>
        /// <param name="objId"></param>
        /// <returns></returns>
        Task<TEntity> QueryByID(object objId);

        /// <summary>
        /// 查询所有数据
        /// </summary>
        /// <returns></returns>
        Task<List<TEntity>> Query();

        /// <summary>
        /// 添加实体
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        Task<long> Add(TEntity model);

        /// <summary>
        /// 更新实体
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>

        Task<bool> Update(TEntity model);
    }

Service 层中添加Base文件夹,并添加接口 BaseService.cs。

public class BaseServices<TEntity> : IBaseServices<TEntity> where TEntity : class, new()
    {
        public IBaseRepository<TEntity> baseDal = new BaseRepository<TEntity>();

        /// <summary>
        /// 写入实体
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public async Task<long> Add(TEntity model)
        {
            return await baseDal.Add(model);
        }

        /// <summary>
        /// 根据ID删除
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>

        public async Task<bool> DeleteByIds(object[] ids)
        {
            return await baseDal.DeleteByIds(ids);
        }

        /// <summary>
        /// 根据ID查询
        /// </summary>
        /// <param name="objId"></param>
        /// <returns></returns>
        public async Task<TEntity> QueryByID(object objId)
        {
            return await baseDal.QueryByID(objId);
        }

        /// <summary>
        /// 更新实体
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public async Task<bool> Update(TEntity model)
        {
            return await baseDal.Update(model);
        }

        /// <summary>
        /// 查询所有数据
        /// </summary>
        /// <returns></returns>
        public async Task<List<TEntity>> Query()
        {
            return await baseDal.Query();
        }

        /// <summary>
        /// 根据ID删除
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        public async Task<bool> DeleteById(string id)
        {
            return await baseDal.DeleteById(id);
        }
    }

在Model层下的Entity文件,新建student.cs实体类

/// <summary>
    /// 学生表
    /// </summary>
    public class Student
    {
        /// <summary>
        /// id
        /// </summary>
        public int Id { get; set; }
        /// <summary>
        /// 姓名
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 年龄
        /// </summary>
        public int Age { get; set; }
    }

在IRepository层中,新建IStudentRepository接口,继承自IBaseRepository<Student>

public interface IStudentRepository:IBaseRepository<Student>
    {
    }

在Repository层中,新建StudentRepository接口,继承自BaseRepository<Student>, IStudentRepository

public class StudentRepository : BaseRepository<Student>, IStudentRepository
    {
    }

在IServices层中,新建IStudentService接口,继承自IBaseServices<Student>

public interface IStudentService : IBaseServices<Student>
    {
    }

在Services层中,新建StudentService接口,继承自BaseService<Student>, IStudentService

public class StudentService : BaseService<Student>, IStudentService
    {

    }

新建控制器StudentController,新增接口

public class StudentController : BaseApiController
    {
        /// <summary>
        /// 添加数据
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        public async Task<IActionResult> Add(Student student)
        {
            IStudentService userService = new StudentService();
            var count = await userService.Add(student);
            return Ok(count);
        }
    }

运行项目,插入数据成功。

.Net Core6.0 WebAPI项目框架搭建六:仓储模式+导入SqlSuagr_数据_03

.Net Core6.0 WebAPI项目框架搭建六:仓储模式+导入SqlSuagr_Web_04