SqlSugar的基本使用

SqlSugar 是一ORM框架,官方文档地址:http://www.codeisbug.com 有兴趣的朋友自行查看。

这里主要说建立 一个简单的实例。

1.建立实体类,这是我就不再把实体写出来了。

2.建立通用数据库连接及数据操作类,这里是直接从官方的例子的基础上衍生的一个通用类,用的是泛型的方式 

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

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

            };

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



        /// <summary>
        /// 获取所有
        /// </summary>
        /// <returns></returns>
        public virtual List<T> GetList()
        {
            return CurrentDb.GetList();
        }

        /// <summary>
        /// 根据表达式查询
        /// </summary>
        /// <returns></returns>
        public virtual List<T> GetList(Expression<Func<T, bool>> whereExpression)
        {
            return CurrentDb.GetList(whereExpression);
        }


        /// <summary>
        /// 根据表达式查询分页
        /// </summary>
        /// <returns></returns>
        public virtual List<T> GetPageList(Expression<Func<T, bool>> whereExpression, PageModel pageModel)
        {
            return CurrentDb.GetPageList(whereExpression, pageModel);
        }

        /// <summary>
        /// 根据表达式查询分页并排序
        /// </summary>
        /// <param name="whereExpression">it</param>
        /// <param name="pageModel"></param>
        /// <param name="orderByExpression">it=>it.id或者it=>new{it.id,it.name}</param>
        /// <param name="orderByType">OrderByType.Desc</param>
        /// <returns></returns>
        public virtual List<T> GetPageList(Expression<Func<T, bool>> whereExpression, PageModel pageModel, Expression<Func<T, object>> orderByExpression = null, OrderByType orderByType = OrderByType.Asc)
        {
            return CurrentDb.GetPageList(whereExpression, pageModel, orderByExpression, orderByType);
        }


        /// <summary>
        /// 根据主键查询
        /// </summary>
        /// <returns></returns>
        public virtual T GetById(dynamic id)
        {
            return CurrentDb.GetById(id);
        }

        /// <summary>
        /// 根据主键删除
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public virtual bool Delete(dynamic id)
        {
            return CurrentDb.Delete(id);
        }


        /// <summary>
        /// 根据实体删除
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public virtual bool Delete(T data)
        {
            return CurrentDb.Delete(data);
        }

        /// <summary>
        /// 根据主键删除
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public virtual bool Delete(dynamic[] ids)
        {
            return CurrentDb.AsDeleteable().In(ids).ExecuteCommand() > 0;
        }

        /// <summary>
        /// 根据表达式删除
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public virtual bool Delete(Expression<Func<T, bool>> whereExpression)
        {
            return CurrentDb.Delete(whereExpression);
        }


        /// <summary>
        /// 根据实体更新,实体需要有主键
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public virtual bool Update(T obj)
        {
            return CurrentDb.Update(obj);
        }

        /// <summary>
        ///批量更新
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public virtual bool Update(List<T> objs)
        {
            return CurrentDb.UpdateRange(objs);
        }

        /// <summary>
        /// 插入
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public virtual bool Insert(T obj)
        {
            return CurrentDb.Insert(obj);
        }


        /// <summary>
        /// 批量
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public virtual bool Insert(List<T> objs)
        {
            return CurrentDb.InsertRange(objs);
        }

        /// <summary>
        /// 查询sql 返回list
        /// </summary>
        /// <param name="sqlstr"></param>
        /// <returns></returns>
        public List<T> SqlQueryList(string sqlstr)
        {
          return  this.Db.SqlQueryable<T>(sqlstr).ToList();
        }

        /// <summary>
        /// 查询sql 返回table
        /// </summary>
        /// <param name="sqlstr"></param>
        /// <returns></returns>
        public DataTable SqlQueryTab(string sqlstr)
        {
            return this.Db.Ado.GetDataTable(sqlstr);
        }



    }

3.继承DbContext并根据业务的不同,对其进行扩展

 public  class 实体类名Manage:DbContext<实体类名>
    {
///扩展的方法
public void insertExt(实体类名 plan) { //to do... } }

4.因为每个实体类都要继承DbContext,稍微大一点的系统,就会显示很杂乱,这里我们建立 adoManage 对其进行统一的管理,当然,如果小伙伴要直接 new 一个实体也是可以的

以下 CardPlan  ,Code 皆为实体类名,小伙伴可自行改名,也考虑利用反射来做

public class adoManage
    {
        public  static  CardPlanManage getCardPlanManage()
        {
            return new CardPlanManage(); 
        }

        public static CodeManage getCodeManage()
        {
            return  new CodeManage();
        }
     

    }

5.调用 ,以上的代码都完成 了的话,调用就很容易了

调用CardPlan的插入方法如下

adoManage.getCardPlanManage().Insert(planInfo);

如调用SqlSugar db里面的方法,即官方网站所用的一些示例的方法

adoManage.getCardPlanManage().Db.相关方法

** SqlSugar有自带的代码生成器,及实体类生成器,可自行到官网下载

原文地址:https://www.cnblogs.com/chcong/p/13142163.html