123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334 |
- using SqlSugar;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Linq.Expressions;
- using System.Text;
- using System.Threading.Tasks;
- namespace MainForm.DbHelper
- {
- /// <summary>
- ///
- /// </summary>
- public class SqlHelper : PracticeContext
- {
- #region 查询
- /// <summary>
- /// 查询实体
- /// </summary>
- /// <typeparam name="T">实体</typeparam>
- /// <returns></returns>
- public List<T> Queryable<T>() where T : class, new()
- {
- return Db.Queryable<T>().ToList();
- }
- /// <summary>
- /// 根据表达式查询实体
- /// </summary>
- /// <typeparam name="T">实体</typeparam>
- /// <param name="expression">Where条件</param>
- /// <returns></returns>
- public List<T> Queryable<T>(Expression<Func<T, bool>> expression) where T : class, new()
- {
- return Db.Queryable<T>().Where(expression).ToList();
- }
- /// <summary>
- /// 根据表达式查询第一条实体
- /// </summary>
- /// <typeparam name="T">实体</typeparam>
- /// <param name="expression">Where条件</param>
- /// <param name="orderFileds">排序字段</param>
- /// <returns></returns>
- public T QueryableAscFirst<T>(Expression<Func<T, bool>> expression, string orderFileds = null) where T : class, new()
- {
- if (orderFileds == null)
- {
- return Db.Queryable<T>().Where(expression).First();
- }
- return Db.Queryable<T>().Where(expression).OrderBy(orderFileds).First();
- }
- /// <summary>
- /// SQL语句查询
- /// </summary>
- /// <typeparam name="T">实体</typeparam>
- /// <param name="sql">SQL执行语句</param>
- /// <returns></returns>
- public List<T> SqlQueryable<T>(string sql) where T : class, new()
- {
- return Db.SqlQueryable<T>(sql).ToList();
- }
- /// <summary>
- /// SQL语句执行
- /// </summary>
- /// <param name="sql">SQL执行语句</param>
- /// <returns></returns>
- public bool SqlExecuteCommand(string sql)
- {
- if (string.IsNullOrEmpty(sql)) return true;
- try
- {
- int count = Db.Ado.ExecuteCommand(sql);
- return count > 0;
- }
- catch (Exception e)
- {
- return ExceptionCapture(e);
- }
- }
- #endregion
- #region 新增
- /// <summary>
- /// 新增
- /// </summary>
- /// <typeparam name="T">实体</typeparam>
- /// <param name="insertObj">数据</param>
- /// <returns>状态</returns>
- public bool Insert<T>(T insertObj) where T : class, new()
- {
- if (insertObj == null) return true;
- try
- {
- return Db.Insertable(insertObj).ExecuteCommandIdentityIntoEntity();
- }
- catch (Exception e)
- {
- throw e;
- }
- }
- /// <summary>
- /// 批量新增
- /// </summary>
- /// <typeparam name="T">实体</typeparam>
- /// <param name="insertObjs">数据</param>
- /// <returns>状态</returns>
- public bool Insert<T>(List<T> insertObjs) where T : class, new()
- {
- if (!insertObjs.Any()) return true;
- try
- {
- //分页操作 ,如果不支持db.Fastest分页插入也是可以提升一下性能的
- Db.Utilities.PageEach(insertObjs, 100, pageList =>
- {
- int result = Db.Insertable(pageList).ExecuteCommand();
- if (result != pageList.Count)
- {
- throw new Exception($"批量新增失败,计划操作{pageList.Count}条,实际操作{result}条");
- }
- });
- return true;
- }
- catch (Exception e)
- {
- return ExceptionCapture(e);
- }
- }
- #endregion
- #region 修改
- /// <summary>
- /// 根据主键修改
- /// </summary>
- /// <typeparam name="T">实体</typeparam>
- /// <param name="UpdateObj">数据</param>
- /// <returns>状态</returns>
- public bool Update<T>(T UpdateObj) where T : class, new()
- {
- if (UpdateObj == null) return true;
- try
- {
- return Db.Updateable(UpdateObj).ExecuteCommandHasChange();
- }
- catch (Exception e)
- {
- return ExceptionCapture(e);
- }
- }
- /// <summary>
- /// 根据主键修改实体指定列
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="UpdateObj">数据</param>
- /// <param name="columns">需要更新的实体列</param>
- /// <returns></returns>
- public bool Update<T>(T UpdateObj, Expression<Func<T, object>> columns) where T : class, new()
- {
- if (UpdateObj == null) return true;
- try
- {
- return Db.Updateable(UpdateObj).UpdateColumns(columns).ExecuteCommandHasChange();
- }
- catch (Exception e)
- {
- return ExceptionCapture(e);
- }
- }
- /// <summary>
- /// 根据主键批量修改
- /// </summary>
- /// <typeparam name="T">实体</typeparam>
- /// <param name="UpdateObjs">数据</param>
- /// <returns>状态</returns>
- public bool Update<T>(List<T> UpdateObjs) where T : class, new()
- {
- if (!UpdateObjs.Any()) return true;
- try
- {
- //分页操作 ,如果不支持db.Fastest分页插入也是可以提升一下性能的
- Db.Utilities.PageEach(UpdateObjs, 100, pageList =>
- {
- int result = Db.Updateable(pageList).ExecuteCommand();
- if (result != pageList.Count)
- {
- throw new Exception($"批量修改失败,计划操作{pageList.Count}条,实际操作{result}条");
- }
- });
- return true;
- }
- catch (Exception e)
- {
- return ExceptionCapture(e);
- }
- }
- #endregion
- #region 删除
- /// <summary>
- /// 根据主键删除
- /// </summary>
- /// <typeparam name="T">实体</typeparam>
- /// <typeparam name="PkType">主键类型</typeparam>
- /// <param name="primaryKeyValue">主键</param>
- /// <returns>状态</returns>
- public bool Deleteable<T, PkType>(PkType primaryKeyValue) where T : class, new()
- {
- try
- {
- return Db.Deleteable<T>().In(primaryKeyValue).ExecuteCommandHasChange();
- }
- catch (Exception e)
- {
- return ExceptionCapture(e);
- }
- }
- /// <summary>
- /// 根据表达式删除
- /// </summary>
- /// <typeparam name="T">实体</typeparam>
- /// <param name="expression">Where条件</param>
- /// <returns>状态</returns>
- public bool Deleteable<T>(Expression<Func<T, bool>> expression) where T : class, new()
- {
- try
- {
- return Db.Deleteable<T>().Where(expression).ExecuteCommandHasChange();
- }
- catch (Exception e)
- {
- return ExceptionCapture(e);
- }
- }
- /// <summary>
- /// 根据主键批量删除
- /// </summary>
- /// <typeparam name="T">实体</typeparam>
- /// <param name="UpdateObjs">数据</param>
- /// <returns>状态</returns>
- public bool Deleteable<T>(List<T> deleteObjs) where T : class, new()
- {
- if (!deleteObjs.Any()) return true;
- try
- {
- //分页操作 ,如果不支持db.Fastest分页插入也是可以提升一下性能的
- Db.Utilities.PageEach(deleteObjs, 100, pageList =>
- {
- int result = Db.Deleteable(pageList).ExecuteCommand();
- if (result != pageList.Count)
- {
- throw new Exception($"批量删除失败,计划操作{pageList.Count}条,实际操作{result}条");
- }
- });
- return true;
- }
- catch (Exception e)
- {
- return ExceptionCapture(e);
- }
- }
- #endregion
- #region 事务 (private,后期扩展增删改方法直接把事务方法添加进去;或者根据需求public)
- /// <summary>
- /// 开始事务
- /// </summary>
- private void BeginTran()
- {
- Db.Ado.BeginTran();
- }
- /// <summary>
- /// 提交事务
- /// </summary>
- private void CommitTran()
- {
- Db.Ado.CommitTran();
- }
- /// <summary>
- /// 回滚事务
- /// </summary>
- private void RollbackTran()
- {
- Db.Ado.RollbackTran();
- }
- #endregion
- #region 异常捕捉
- /// <summary>
- /// 异常捕捉
- /// </summary>
- /// <param name="e"></param>
- /// <returns></returns>
- private bool ExceptionCapture(Exception ex)
- {
- Console.WriteLine("\n异常信息:\n{0}", ex.Message);
- return false;
- }
- #endregion
- }
- }
|