FreeSql仓储封装类
- FreeSql
- 2022-10-19 11:34:33
- 人已阅读
简介FreeSql新封装类:自带Creator信息和假删除设置
using FreeSql; using FreeSql.Internal.Model; using Microsoft.Data.SqlClient; using DeYi.NuGet.JwtToken; using DeYi.NuGet.Other; using DeYi.NuGet.PagedData; using DeYi.NuGet.SnowFlake.Single; using System; using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Linq.Expressions; using System.Text; using OCR.Domain.Dto; using OCR.Domain.Common; using DeYi.NuGet; using OCR.Domain.Enum; namespace OCR.WebAPI.System.FreeSql { ////// FreeSql新封装类:自带Creator信息和假删除设置 /// public static class FreeSqlNew { ////// 重写freesql:新增单个 /// ////// public static IInsert InsertOne (this IFreeSql FreeSql, TEntity T, ISnowFlake snowFlake) where TEntity : BaseEntity { T.ID = snowFlake.NextId(); T.CreatorID = CurrentUser.UserID; T.CreatorName = CurrentUser.UserName; T.CreateDate = DateTime.Now; T.IsDelete = false; T.Terminal = EnumHelper.GetModel ((int)(CurrentUser.Terminal ?? 10)); return FreeSql.Insert(T); } /// /// 重写freesql:新增多个:待测 /// ////// public static IInsert InsertMany (this IFreeSql FreeSql, List list, ISnowFlake snowFlake) where TEntity : BaseEntity { foreach (var T in list) { T.ID = snowFlake.NextId(); T.CreatorID = CurrentUser.UserID; T.CreatorName = CurrentUser.UserName; T.CreateDate = DateTime.Now; T.IsDelete = false; T.Terminal = EnumHelper.GetModel ((int)CurrentUser.Terminal); } return FreeSql.Insert(list); } /// /// 重写freesql:修改(仅实体) /// ////// public static IUpdate UpdateOne (this IFreeSql FreeSql, TEntity T) where TEntity : BaseEntity { T.LastModifierID = CurrentUser.UserID; T.LastModifierName = CurrentUser.UserName; T.LastModificationTime = DateTime.Now; return FreeSql.Update ().SetSource(T); } /// /// 重写freesql:修改(仅实体 + 自动附加Modify等字段)多个 /// ////// public static IUpdate UpdateMany (this IFreeSql FreeSql, List list) where TEntity : BaseEntity { foreach (var T in list) { T.LastModifierID = CurrentUser.UserID; T.LastModifierName = CurrentUser.UserName; T.LastModificationTime = DateTime.Now; } return FreeSql.Update ().SetSource(list); } /// /// 重写freesql:修改(仅指定字段 + 自动附加Modify等字段) /// ////// /// Lambda条件 /// /// public static IUpdate UpdateBy (this IFreeSql FreeSql, Expression > Predicate, Expression > Content) where TEntity : BaseEntity, new() { return FreeSql.Update ().Set(Content).Set(e => new TEntity { LastModifierID = CurrentUser.UserID, LastModifierName = CurrentUser.UserName, LastModificationTime = DateTime.Now }).Where(Predicate); } /// /// 重写freesql:删除单个,无需实现ExecuteAffrowsAsync /// ////// /// /// /// public static async Task DeleteOne (this IFreeSql FreeSql, long ID, bool isTrueDelete = false) where TEntity : BaseEntity, new() { if (isTrueDelete) { return await FreeSql.Delete (ID).ExecuteAffrowsAsync(); } return await FreeSql.Update ().Set(e => new TEntity { LastModifierID = CurrentUser.UserID, LastModifierName = CurrentUser.UserName, LastModificationTime = DateTime.Now, IsDelete = true, }).Where(e => e.ID == ID).ExecuteAffrowsAsync(); } /// /// 重写freesql:删除ByFilter,无需实现ExecuteAffrowsAsync /// ////// /// /// /// public static async Task DeleteMany (this IFreeSql FreeSql, Expression > filter, bool isTrueDelete = false) where TEntity : BaseEntity, new() { if (isTrueDelete) { return await FreeSql.Delete (filter).ExecuteAffrowsAsync(); } return await FreeSql.Update ().Set(e => new TEntity { LastModifierID = CurrentUser.UserID, LastModifierName = CurrentUser.UserName, LastModificationTime = DateTime.Now, IsDelete = true, }).Where(filter).ExecuteAffrowsAsync(); } /// /// 执行存储过程 /// /// /// ///public static async Task > DoStoredProcedure(IFreeSql FreeSql, DoStoredProcedureInputDto Input) { List
ResultData = new(); List SqlParameterList = new(); Input.ParameterList.ForEach(item => { string[] Parameter = item.Split('='); SqlParameterList.Add(new SqlParameter(Parameter[0], Parameter[1])); }); SqlParameterList.Add(new SqlParameter($"IdentityUserId", CurrentUser.UserID)); //SqlParameterList.Add(new SqlParameter($"ResultStatus", SqlDbType.Int) { Direction = ParameterDirection.Output, Size = int.MaxValue }); //SqlParameterList.Add(new SqlParameter($"Msg", SqlDbType.NVarChar) { Direction = ParameterDirection.Output, Size = int.MaxValue }); //委托方法 Func , Task> func = e => { var DataReader = e.Object; do { string ResultDataItem = ToJson(DataReader); if (!ResultDataItem.IsNullOrEmpty()) ResultData.Add(ResultDataItem); } while (DataReader.NextResult()); return Task.CompletedTask; }; //读取DataReader并执行委托方法func await FreeSql.Ado.ExecuteReaderAsync(func, CommandType.StoredProcedure, Input.ActionName, SqlParameterList.ToArray()); return ResultData; } #region private lib private static string ToJson(DbDataReader dataReader) { StringBuilder jsonString = new StringBuilder(); jsonString.Append('['); while (dataReader.Read()) { jsonString.Append('{'); for (int i = 0; i < dataReader.FieldCount; i++) { Type type = dataReader.GetFieldType(i); string strKey = dataReader.GetName(i); string strValue = dataReader[i].ToString(); jsonString.Append("\"" + strKey + "\":"); strValue = StringFormat(strValue, type); if (i < dataReader.FieldCount - 1) { jsonString.Append(strValue + ","); } else { jsonString.Append(strValue); } } jsonString.Append("},"); } jsonString.Remove(jsonString.Length - 1, 1); if (jsonString.Length > 0) jsonString.Append(']'); else jsonString.Append("[]"); return jsonString.ToString(); } private static string StringFormat(string str, Type type) { if (string.IsNullOrEmpty(str)) return "\"\""; if (type == typeof(string)) { str = "\"" + ConvertStrToSpecificationStrs(str) + "\""; } else if (type == typeof(DateTime)) { str = "\"" + Convert.ToDateTime(str).ToString("yyyy-MM-dd HH:mm:ss") + "\""; } else if (type == typeof(Guid)) { str = "\"" + str + "\""; } else if (type == typeof(bool)) { str = str.ToLower(); } return str; } private static string ConvertStrToSpecificationStrs(string str) { if (string.IsNullOrEmpty(str)) return ""; StringBuilder sb = new StringBuilder(); for (int i = 0; i < str.Length; i++) { char cStr = str.ToCharArray()[i]; switch (cStr) { case '\"': sb.Append("\\\""); break; case '\\': sb.Append("\\\\"); break; case '/': sb.Append("\\/"); break; case '\b': sb.Append("\\b"); break; case '\f': sb.Append("\\f"); break; case '\n': sb.Append("\\n"); break; case '\r': sb.Append("\\r"); break; case '\t': sb.Append("\\t"); break; default: sb.Append(cStr); break; } } return sb.ToString(); } #endregion private lib } }
上一篇:FreeSql分页扩展类
下一篇:BinGe个人博客
文章评论
- 消灭零回复