BaseProvider.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Configuration;
  7. using System.Threading.Tasks;
  8. using Dapper;
  9. using MySql.Data.MySqlClient;
  10. using Winsoft.GOV.Framework.Model;
  11. namespace Winsoft.GOV.Framework.Provider
  12. {
  13. public abstract class BaseProvider<T>
  14. {
  15. #region instance
  16. protected County _county;
  17. private static object lockObj = new object();
  18. protected static void CreateInstance<K>(ref K singleInstance) where K : BaseProvider<T>, new()
  19. {
  20. if (singleInstance == null)
  21. {
  22. lock (lockObj)
  23. {
  24. if (singleInstance == null)
  25. {
  26. singleInstance = new K();
  27. }
  28. }
  29. }
  30. }
  31. #endregion
  32. #region connection
  33. protected string connectionString;
  34. public BaseProvider(County county)
  35. {
  36. _county = county;
  37. connectionString = "gov_" + _county.ToString();
  38. }
  39. /// <summary>
  40. /// </summary>
  41. /// <param name="connectionStr"></param>
  42. /// <returns></returns>
  43. protected IDbConnection GetDbConnection()
  44. {
  45. string connectionStr = ConfigurationManager.ConnectionStrings[connectionString].ConnectionString;
  46. var connection = new MySqlConnection
  47. {
  48. ConnectionString = connectionStr
  49. };
  50. connection.Open();
  51. return connection;
  52. }
  53. protected string BuildTotalSQL(string sql)
  54. {
  55. var selectCount = new StringBuilder("SELECT COUNT(1) from (");
  56. return
  57. selectCount.Append(sql + ") as t")
  58. .ToString();
  59. }
  60. /// <summary>
  61. /// </summary>
  62. /// <param name="total"></param>
  63. /// <param name="sql"></param>
  64. /// <param name="pageIndex">内部索引从0开始,页码从1开始</param>
  65. /// <code>
  66. /// if (pageIndex - 1 >= 0)
  67. /// {
  68. /// pageIndex = pageIndex - 1;
  69. /// }
  70. /// </code>
  71. /// <param name="pageSize"></param>
  72. /// <param name="param"></param>
  73. /// <param name="areaCode"></param>
  74. /// <returns></returns>
  75. //protected PagedResult<T> GetPagedList(string sql, int pageIndex, int pageSize, object param)
  76. //{
  77. // long total = 0;
  78. // pageIndex -= 1;
  79. // if (pageIndex < 0)
  80. // {
  81. // pageIndex = 0;
  82. // }
  83. // if (pageSize <= 0)
  84. // {
  85. // pageSize = 20;
  86. // }
  87. // using (IDbConnection connection = GetDbConnection())
  88. // {
  89. // string totalSql = BuildTotalSQL(sql);
  90. // total = connection.Query<long>(totalSql, param).FirstOrDefault();
  91. // var list = connection.Query<T>(String.Format(sql + " limit {0},{1}", pageIndex * pageSize, pageSize), param);
  92. // return new PagedResult<T>(list, pageIndex + 1, pageSize, total);
  93. // }
  94. //}
  95. protected IEnumerable<T> GetItemList(string sql, int itemIndex, int pageSize, object param)
  96. {
  97. if (itemIndex < 0)
  98. {
  99. itemIndex = 0;
  100. }
  101. if (pageSize <= 0)
  102. {
  103. pageSize = 20;
  104. }
  105. using (IDbConnection connection = GetDbConnection())
  106. {
  107. var list = connection.Query<T>(String.Format(sql + " limit {0},{1}", itemIndex, pageSize), param);
  108. return list;
  109. }
  110. }
  111. #endregion
  112. }
  113. }