仓储模式:

Repository&IRepository  仓储层

Service&IService  服务层

Models  数据层

1.使用sqlsugar,一般在Models层引入SqlSugarCore 和 SqlSugar.IOC 两个Get包 因为其他层一般都会调用到models层,因此只需在models引入包,其他调用models层即可

2.增删改查是基本的,因此创建一个Base基类,包括了增删改查。当其他实体需要CRUD以外的方法时,重写/override或者新增对应的方法即可

2.1  I开头写接口,反之写实现(服务层一样)

      /// <summary>
        ////// <returns></returns>
        bool Inserta(T entity);
        /// <summary>
        ////// <returns></returns>
        bool Delete(int id);
        /// <summary>
        ////// <returns></returns> 
        bool Updata(T entity);
        /// <summary>
        /// 查询全部
        /// <returns></returns>
        List<T> QueryAll();
        /// <summary>
        /// 条件查询所有
        /// <returns></returns>
        List<T> QueryConditionAll(Expression<Func<T,bool>> expression);
        /// <summary>
        /// 查询第一个
        /// <returns></returns>
        T QueryFirst(int id);
        /// <summary>
        /// 根据条件查询第一个
        /// <returns></returns>
        T QueryConditionFirst(Expression<Func<T, bool>> expression);
接口
  public bool Delete(int id)
        {
            return base.DeleteById(id);
        }

        public bool Inserta(T entity)
        {
            return base.Insert(entity);
        }

        public List<T> QueryAll()
        {
            return base.GetList();
        }

        public List<T> QueryConditionAll(Expression<Func<T, bool>> expression)
        {
           return base.GetList(expression);
        }

        public T QueryConditionFirst(Expression<Func<T, bool>> expression)
        {
           return base.GetFirst(expression);
        }

        public T QueryFirst(int id)
        {
            return base.GetById(id);
        }

        public bool Updata(T entity)
        {
            return base.Update(entity);
        }
实现

3. Startup配置。这里使用的是sqlsugar自带的IOC进行依赖注入,以此来使用sqlsugar   SqlSugar.IOC/依赖注入 - SqlSugar 5x - .NET果糖网 (donet5.com)

       #region SQLsugarIOC 注入配置
            services.AddSqlSugar(new SqlSugar.IOC.IocConfig()
            {
                ConnectionString = Configuration["SqlConnection"],  //数据库连接字符串
                DbType = SqlSugar.IOC.IocDbType.SqlServer,          //数据库类型
                IsAutoCloseConnection = true                        //自动释放               
            });
            #endregion                    

 4.  之前用EF添加数据模型之后自动都根据数据库生成的实体,sqlsugar有一点不同的是需要自己写代码去操作同步。

  可以通过写的实体类去生成数据库,或者根据数据库生成实体。我比较喜欢前者,因为后者要去设置一下文件的路径,感觉有点不好用。

4.1 通过实体生成数据库  或者 通过数据库生成 实体Db First 实体生成 - SqlSugar 5x - .NET果糖网 (donet5.com)

仓储模式使用 sqlsugar。在BaseRepository中写代码。首先要继承SimpleClient<T>,其后 再 继承接口

在执行到这个类的时候,会将ISqlSugarClient 注入进来,

个人理解仓储层继承base,将注入进来的ISqlSugarClient传给base 。Context上下文=bScoped.SugarScope)这点我理解不够深层次,如果有大佬看到了可以交流交流

   public class BaseRepository<T> : SimpleClient<T>, IBaseRepository<T> where T : class, new()
    {
        public BaseRepository(ISqlSugarClient sqlSugar = null) : base(sqlSugar)
        {
            base.Context = DbScoped.SugarScope;
            //下面是生成数据库的操作,执行一遍就行,然后可以注释掉
            base.Context.DbMaintenance.CreateDatabase();//如果没有数据库就会先创建,有就不创建了
            base.Context.CodeFirst.InitTables(          //初始化表
                typeof(ArticleInfo), 
                typeof(ArticleTypeInfo), 
                typeof(UserInfo), 
                typeof(UserTypeInfo)
                );
            //生成实体位置 参数一路径 参数二命名空间
            base.Context.DbFirst.CreateClassFile("C:/", "WebBokeModels");
        }
}

 5. 服务层的写法跟仓储层一样,省略了…… 

5.1 根据实体分别创建出仓储层和服务层的接口和实现类 

例如:

 

IArticleInfoService继承IBaseService<ArticleInfo>

ArticleInfoService继承BaseService<ArticleInfo>,IArticleInfoService……

增删改查都是基本需要的,因此都继承base类,如果需要其他扩展方法在与实体对应的接口和类里面添加方法,或重写方法。

6.添加API控制器,此时数据库还没建立。数据库会在项目第一次运行的时候建立。因此数据库此时是空的,我们先各自添加一个添加的方法。

Userinfo 用户信息  UserType 用户角色  ArticleInfo 文章表  ArticleType 文章类型

 

posted on 2022-07-27 20:14  尝尝手指  阅读(320)  评论(0编辑  收藏  举报