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 + "\r\n" +
                                  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有自帶的代碼生成器,及實體類生成器,可自行到官網下載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM