SqlSugar的使用和自擴展

本文講解SqlSugar這個ORM的使用和一些自己擴展,官網教程在我的書籤中

 

直接上代碼:

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Linq.Expressions;
using Newtonsoft.Json;
using SqlSugar;
using TestConsoleForSqlSugar.Models;
using DbType = SqlSugar.DbType;

namespace TestConsoleForSqlSugar.Services
{
    public class SugarService
    {
        /// <summary>
        /// 初始化dbContext實例
        /// </summary>
        /// <returns></returns>
        public static SqlSugarClient CreateClient()
        {
            var config = new ConnectionConfig()
            {
                DbType = DbType.SqlServer,
                ConnectionString = "******************************************************",
                IsAutoCloseConnection = true,
                InitKeyType = InitKeyType.Attribute
            };
            var dbContext = new SqlSugarClient(config);
            dbContext.Aop.OnLogExecuting = (sql, arrPara) =>
            {
                Console.WriteLine("要執行的sql:" + sql);
                if (arrPara == null || arrPara.Length <= 0) return;
                Console.WriteLine("參數列表:");
                int indexPara = 0;
                foreach (var item in arrPara)
                {
                    Console.WriteLine($"{indexPara++}.{item.ParameterName}:{item.Value}");
                }
            };
            return dbContext;
        }

        /// <summary>
        /// 查詢dataTable
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="dicPara"></param>
        /// <returns></returns>
        public static DataTable QueryDataTable(string sql, Dictionary<string, object> dicPara = null)
        {
            var dbContext = CreateClient();
            if (dicPara == null || dicPara.Count <= 0)
            {
                return dbContext.Ado.GetDataTable(sql);
            }
            else
            {
                var paraList = CreateSugarParameterList(dicPara);
                return dbContext.Ado.GetDataTable(sql, paraList);
            }
        }

        /// <summary>
        /// 查詢集合,使用Newtonsoft.Json
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="sql"></param>
        /// <param name="dicPara"></param>
        /// <returns></returns>
        public static List<T> QueryList<T>(string sql, Dictionary<string, object> dicPara = null)
        {
            var dt = QueryDataTable(sql, dicPara);
            if (dt == null || dt.Rows.Count <= 0) return new List<T>();
            string dtJson = JsonConvert.SerializeObject(dt);
            return JsonConvert.DeserializeObject<List<T>>(dtJson);
        }

        /// <summary>
        /// 根據字典創建sqlSugar參數集合
        /// </summary>
        /// <param name="dicPara"></param>
        /// <param name="isReturnNull"></param>
        /// <returns></returns>
        public static List<SugarParameter> CreateSugarParameterList(Dictionary<string, object> dicPara, bool isReturnNull = true)
        {
            if (dicPara == null || dicPara.Count <= 0) return null;
            return dicPara.Select(r => new SugarParameter(r.Key, r.Value)).ToList();
        }

        public static string CreateGuid()
        {
            return Guid.NewGuid().ToString();
        }

        /// <summary>
        /// 新增(只新增賦值過的字段)
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="model"></param>
        /// <param name="dbContext"></param>
        /// <returns></returns>
        public static int Insert<T>(T model, SqlSugarClient dbContext = null) where T : BaseDbModel, new()
        {
            dbContext = dbContext ?? CreateClient();
            var changed = model.GetChanged().ToArray();
            return dbContext.Insertable(model).InsertColumns(changed).ExecuteCommand();
        }

        /// <summary>
        /// 修改(只修改賦值過的字段)
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="model"></param>
        /// <param name="where"></param>
        /// <param name="dbContext"></param>
        /// <returns></returns>
        public static int Update<T>(T model, Expression<Func<T, bool>> where, SqlSugarClient dbContext = null) where T : BaseDbModel, new()
        {
            dbContext = dbContext ?? CreateClient();
            var changed = model.GetChanged().ToArray();
            return dbContext.Updateable(model).UpdateColumns(changed).Where(where).ExecuteCommand();
        }

        /// <summary>
        /// 事務執行
        /// </summary>
        /// <param name="action"></param>
        /// <param name="isDefaultLevel"></param>
        /// <param name="level"></param>
        public static void RunWithTransaction(Action<SqlSugarClient> action, bool isDefaultLevel = true, IsolationLevel level = IsolationLevel.Chaos)
        {
            var dbContext = CreateClient();
            try
            {
                if (isDefaultLevel)
                    dbContext.Ado.BeginTran();
                else
                    dbContext.Ado.BeginTran(level);

                action.Invoke(dbContext);

                dbContext.CommitTran();
            }
            catch (Exception ex)
            {
                dbContext.Ado.RollbackTran();
                throw;
            }
        }

        /// <summary>
        /// 刪除操作
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="where"></param>
        /// <param name="dbContext"></param>
        /// <returns></returns>
        public static int Delete<T>(Expression<Func<T, bool>> where, SqlSugarClient dbContext = null) where T : class, new()
        {
            dbContext = dbContext ?? CreateClient();
            return dbContext.Deleteable<T>().Where(where).ExecuteCommand();
        }
    }
}

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章