QueriesRepository.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. using AipGateway.API.Domain.IRepositories.IGenericRepositories;
  2. using AipGateway.API.Infrastructure.Configurations;
  3. using AipGateway.API.Infrastructure.Persistence;
  4. using Microsoft.Data.SqlClient;
  5. using Microsoft.EntityFrameworkCore;
  6. using Newtonsoft.Json;
  7. using System.Data;
  8. namespace AipGateway.API.Infrastructure.DataAccess
  9. {
  10. public class QueriesRepository<T> : IQueriesRepository<T> where T : class
  11. {
  12. private readonly ApplicationDbContext _context;
  13. private readonly ConnectionInfo _connectionInfo;
  14. public QueriesRepository(ApplicationDbContext context, ConnectionInfo connectionInfo)
  15. {
  16. _context = context;
  17. _connectionInfo = connectionInfo;
  18. _context.Database.SetCommandTimeout(4800); // Set database request timeout 8 mintutes
  19. }
  20. public void Attach(T entity)
  21. {
  22. var set = _context.Set<T>();
  23. set.Attach(entity);
  24. }
  25. public IQueryable<T> Query()
  26. {
  27. return _context.Set<T>();
  28. }
  29. public List<T> BindList(DataTable dt)
  30. {
  31. var serializeString = JsonConvert.SerializeObject(dt);
  32. return JsonConvert.DeserializeObject<List<T>>(serializeString);
  33. }
  34. private static TResponse BindObject<TResponse>(DataTable dt) where TResponse : class
  35. {
  36. var serializeString = JsonConvert.SerializeObject(dt);
  37. return JsonConvert.DeserializeObject<List<TResponse>>(serializeString)?.FirstOrDefault();
  38. }
  39. private static List<TResponse> BindList<TResponse>(DataTable dt) where TResponse : class
  40. {
  41. var serializeString = JsonConvert.SerializeObject(dt);
  42. return serializeString == "[]" ? new List<TResponse>() : JsonConvert.DeserializeObject<List<TResponse>>(serializeString);
  43. }
  44. public List<T> ExecuteSqlStoredProcedure(string sqlQuery, params SqlParameter[] parameters)
  45. {
  46. var storedProcedureResult = GetDataTableFromQuery(sqlQuery, true, parameters);
  47. return BindList(storedProcedureResult);
  48. }
  49. public IQueryable<T> ExecuteSqlQuery(string sqlQuery, params SqlParameter[] sqlParameters)
  50. {
  51. if (sqlParameters != null)
  52. {
  53. return _context.Set<T>().FromSqlRaw(sqlQuery, sqlParameters).IgnoreQueryFilters().AsQueryable();
  54. }
  55. return _context.Set<T>().FromSqlRaw(sqlQuery).AsQueryable();
  56. }
  57. public int ExecuteQueryScalar(string dmlQuery, params SqlParameter[] parameters)
  58. {
  59. var ID = 0;
  60. using (var connection = new SqlConnection(_connectionInfo.ConnectionString))
  61. {
  62. using (var cmd = new SqlCommand(dmlQuery, connection))
  63. {
  64. cmd.Parameters.Clear();
  65. cmd.Parameters.AddRange(parameters);
  66. ID = (int)cmd.ExecuteScalar();
  67. }
  68. }
  69. return ID;
  70. }
  71. public void ExecuteQueryNonScalar(string dmlQuery, bool IsStoredProcedure = false, params SqlParameter[] parameters)
  72. {
  73. using (var connection = new SqlConnection(_connectionInfo.ConnectionString))
  74. {
  75. using (var cmd = new SqlCommand(dmlQuery, connection))
  76. {
  77. if (IsStoredProcedure)
  78. {
  79. cmd.CommandType = CommandType.StoredProcedure;
  80. }
  81. cmd.Parameters.Clear();
  82. cmd.Parameters.AddRange(parameters.ToArray());
  83. cmd.ExecuteNonQuery();
  84. }
  85. }
  86. }
  87. public DataSet GetDataSetFromQuery(string sqlQuery, bool IsStoredProcedure = false, params SqlParameter[] parameters)
  88. {
  89. var ds = new DataSet();
  90. using (var connection = new SqlConnection(_connectionInfo.ConnectionString))
  91. {
  92. connection.Open();
  93. var da = new SqlDataAdapter(sqlQuery, connection);
  94. da.SelectCommand.Parameters.Clear();
  95. da.SelectCommand.Parameters.AddRange(parameters);
  96. da.SelectCommand.CommandTimeout = 4800;
  97. da.SelectCommand.CommandType = IsStoredProcedure ? CommandType.StoredProcedure : CommandType.Text;
  98. da.Fill(ds);
  99. }
  100. return ds;
  101. }
  102. public DataTable GetDataTableFromQuery(string sqlQuery, bool IsStoredProcedure = false, params SqlParameter[] parameters)
  103. {
  104. var dt = new DataTable();
  105. using (var connection = new SqlConnection(_connectionInfo.ConnectionString))
  106. {
  107. connection.Open();
  108. var da = new SqlDataAdapter(sqlQuery, connection);
  109. da.SelectCommand.Parameters.Clear();
  110. da.SelectCommand.Parameters.AddRange(parameters);
  111. da.SelectCommand.CommandTimeout = 4800;
  112. da.SelectCommand.CommandType = IsStoredProcedure ? CommandType.StoredProcedure : CommandType.Text;
  113. da.Fill(dt);
  114. }
  115. return dt;
  116. }
  117. public SqlParameter CreateSqlParameter(string ParameterName, object value)
  118. {
  119. return new SqlParameter()
  120. {
  121. ParameterName = ParameterName,
  122. Value = value
  123. };
  124. }
  125. }
  126. }