using Dapper; using Estsh.Core.Base; using Estsh.Core.Dapper; using Estsh.Core.Extensions; using Estsh.Core.SqlSugar; using Estsh.Core.Util; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Threading.Tasks; namespace Estsh.Core.Repositories { public abstract class BaseRepository : SqlSugarDbHelper, IBaseRepository, IDependency where T : BaseEntity { protected DapperDbContext dapperDbContext { get; set; } public BaseRepository(DapperDbContext _dapperDbContext) { dapperDbContext = _dapperDbContext; } /// /// 批量执行sql,带事务 /// /// /// /// /// public bool ExecuteTransaction(List sqlStrings, List parameterList, int? commandTimeout = null) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { bool isClosed = dbConn.State == ConnectionState.Closed; if (isClosed) { dbConn.Open(); } //开启事务 using (var transaction = dbConn.BeginTransaction()) { try { bool successCount = true; for (int i = 0; i < sqlStrings.Count; i++) { dbConn.Execute(sqlStrings[i], parameterList[i], transaction, commandTimeout); } //提交事务 transaction.Commit(); return true; } catch (Exception ex) { //回滚事务 LogHelper.Error("ExecuteTransaction", ex); transaction.Rollback(); dbConn.Close(); dbConn.Dispose(); throw ex; } finally { dbConn.Close(); dbConn.Dispose(); } } } } public int Insert(T entity, string sql) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); var result = dbConn.Execute(sql, entity); return result; } } public async Task InsertAsync(T entity, string sql) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); var result = await dbConn.ExecuteAsync(sql, entity); return result; } } public async Task UpdateAsync(T entity, string sql) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); var result = await dbConn.ExecuteAsync(sql, entity); return result; } } public async Task DeleteAsync(int id, string sql) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); var result = await dbConn.ExecuteAsync(sql, new { Id = id}); return result; } } public async Task GetAsync(int id, string sql) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); var result = await dbConn.QueryFirstOrDefaultAsync(sql, new { Id = id }); return result; } } public async Task> GetListAsync(string sql) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); var result = await Task.Run(() => dbConn.Query(sql).ToList()); return result; } } public async Task> GetByDynamicParams(string sql, DynamicParameters dynmicParams) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); var result = await Task.Run(() => dbConn.Query(sql, dynmicParams).ToList()); return result; } } } }