DbExtension.cs 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. using Microsoft.AspNetCore.Hosting;
  2. using Microsoft.Extensions.Configuration;
  3. using Microsoft.Extensions.DependencyInjection;
  4. using SqlSugar;
  5. using SqlSugar.IOC;
  6. namespace WMS.BZSqlSugar
  7. {
  8. public static class DbExtension
  9. {
  10. /// <summary>
  11. /// 初始化db
  12. /// </summary>
  13. /// <param name="services"></param>
  14. /// <param name="Configuration"></param>
  15. /// <param name="environment"></param>
  16. public static void AddSqlSugarDb(this IServiceCollection services, IConfiguration Configuration, IWebHostEnvironment environment)
  17. {
  18. var lists = Util.ConfigHelper.GetConnectionConfigs().Connections;
  19. var iocList = new List<IocConfig>();
  20. foreach (var item in lists)
  21. {
  22. iocList.Add(new IocConfig()
  23. {
  24. ConfigId = item.ConfigId,
  25. ConnectionString = item.ConnectionString,
  26. DbType = (IocDbType)item.DataBaseType,
  27. IsAutoCloseConnection = item.IsAutoCloseConn
  28. });
  29. }
  30. SugarIocServices.AddSqlSugar(iocList);
  31. ICacheService cache = new SqlSugarCache();
  32. SugarIocServices.ConfigurationSugar(db =>
  33. {
  34. iocList.ForEach(iocConfig =>
  35. {
  36. SetSugarAop(db, iocConfig, cache);
  37. });
  38. });
  39. }
  40. public static void AddQuestDBSqlSugarDb(this IServiceCollection services, IConfiguration Configuration, IWebHostEnvironment environment)
  41. {
  42. var lists = Util.ConfigHelper.GetQuestDBConnectionConfigs().Connections;
  43. var iocList = new List<IocConfig>();
  44. foreach (var item in lists)
  45. {
  46. iocList.Add(new IocConfig()
  47. {
  48. ConfigId = item.ConfigId,
  49. ConnectionString = item.ConnectionString,
  50. DbType = (IocDbType)item.DataBaseType,
  51. IsAutoCloseConnection = item.IsAutoCloseConn
  52. });
  53. }
  54. SugarIocServices.AddSqlSugar(iocList);
  55. ICacheService cache = new SqlSugarCache();
  56. SugarIocServices.ConfigurationSugar(db =>
  57. {
  58. iocList.ForEach(iocConfig =>
  59. {
  60. SetQuestDBSugarAop(db, iocConfig, cache);
  61. });
  62. });
  63. }
  64. /// <summary>
  65. /// 数据库Aop设置
  66. /// </summary>
  67. /// <param name="db"></param>
  68. /// <param name="iocConfig"></param>
  69. /// <param name="cache"></param>
  70. private static void SetSugarAop(SqlSugarClient db, IocConfig iocConfig, ICacheService cache)
  71. {
  72. var config = db.GetConnectionScope(iocConfig.ConfigId).CurrentConnectionConfig;
  73. string configId = config.ConfigId;
  74. db.GetConnectionScope(configId).Aop.OnLogExecuting = (sql, pars) =>
  75. {
  76. string log = $"【db{configId} SQL语句】{UtilMethods.GetSqlString(config.DbType, sql, pars)}\n";
  77. if (sql.TrimStart().StartsWith("SELECT", StringComparison.OrdinalIgnoreCase))
  78. {
  79. Console.WriteLine(log);
  80. }
  81. else if (sql.StartsWith("UPDATE", StringComparison.OrdinalIgnoreCase) || sql.StartsWith("INSERT", StringComparison.OrdinalIgnoreCase))
  82. {
  83. Console.WriteLine(log);
  84. }
  85. else if (sql.StartsWith("DELETE", StringComparison.OrdinalIgnoreCase) || sql.StartsWith("TRUNCATE", StringComparison.OrdinalIgnoreCase))
  86. {
  87. Console.WriteLine(log);
  88. }
  89. else
  90. {
  91. log = $"【db{configId} SQL语句】dbo.{sql} {string.Join(", ", pars.Select(x => x.ParameterName + " = " + GetParsValue(x)))};\n";
  92. Console.WriteLine(log);
  93. }
  94. };
  95. db.GetConnectionScope(configId).Aop.OnError = (ex) =>
  96. {
  97. //var pars = db.Utilities.SerializeObject(((SugarParameter[])ex.Parametres).ToDictionary(it => it.ParameterName, it => it.Value));
  98. string sql = "【错误SQL】" + UtilMethods.GetSqlString(config.DbType, ex.Sql, (SugarParameter[])ex.Parametres) + "\r\n";
  99. Console.WriteLine( $"\"【错误SQL】\"{sql}\r\n{ex.Message}\r\n{ex.StackTrace}");
  100. };
  101. db.GetConnectionScope(configId).Aop.DataExecuting = (oldValue, entiyInfo) =>
  102. {
  103. };
  104. db.GetConnectionScope(configId).CurrentConnectionConfig.MoreSettings = new ConnMoreSettings()
  105. {
  106. IsAutoRemoveDataCache = true
  107. };
  108. }
  109. private static void SetQuestDBSugarAop(SqlSugarClient db, IocConfig iocConfig, ICacheService cache)
  110. {
  111. var config = db.GetConnectionScope(iocConfig.ConfigId).CurrentConnectionConfig;
  112. string configId = config.ConfigId;
  113. db.GetConnectionScope(configId).Aop.OnLogExecuting = (sql, pars) =>
  114. {
  115. string log = $"【db{configId} SQL语句】{UtilMethods.GetSqlString(config.DbType, sql, pars)}\n";
  116. if (sql.TrimStart().StartsWith("SELECT", StringComparison.OrdinalIgnoreCase))
  117. {
  118. Console.WriteLine(log);
  119. }
  120. else if (sql.StartsWith("UPDATE", StringComparison.OrdinalIgnoreCase) || sql.StartsWith("INSERT", StringComparison.OrdinalIgnoreCase))
  121. {
  122. Console.WriteLine(log);
  123. }
  124. else if (sql.StartsWith("DELETE", StringComparison.OrdinalIgnoreCase) || sql.StartsWith("TRUNCATE", StringComparison.OrdinalIgnoreCase))
  125. {
  126. Console.WriteLine(log);
  127. }
  128. else
  129. {
  130. log = $"【db{configId} SQL语句】dbo.{sql} {string.Join(", ", pars.Select(x => x.ParameterName + " = " + GetParsValue(x)))};\n";
  131. Console.WriteLine(log);
  132. }
  133. };
  134. db.GetConnectionScope(configId).Aop.OnError = (ex) =>
  135. {
  136. //var pars = db.Utilities.SerializeObject(((SugarParameter[])ex.Parametres).ToDictionary(it => it.ParameterName, it => it.Value));
  137. string sql = "【错误SQL】" + UtilMethods.GetSqlString(config.DbType, ex.Sql, (SugarParameter[])ex.Parametres) + "\r\n";
  138. Console.WriteLine($"\"【错误SQL】\"{sql}\r\n{ex.Message}\r\n{ex.StackTrace}");
  139. };
  140. db.GetConnectionScope(configId).Aop.DataExecuting = (oldValue, entiyInfo) =>
  141. {
  142. };
  143. db.GetConnectionScope(configId).CurrentConnectionConfig.MoreSettings = new ConnMoreSettings()
  144. {
  145. IsAutoRemoveDataCache = true
  146. };
  147. }
  148. private static object GetParsValue(SugarParameter x)
  149. {
  150. if (x.DbType == System.Data.DbType.String || x.DbType == System.Data.DbType.DateTime || x.DbType == System.Data.DbType.String)
  151. {
  152. return "'" + x.Value + "'";
  153. }
  154. return x.Value;
  155. }
  156. }
  157. }