本文講解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();
}
}
}