You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

144 lines
4.6 KiB
C#

2 years ago
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<T> : SqlSugarDbHelper, IBaseRepository<T>, IDependency where T : BaseEntity
{
protected DapperDbContext dapperDbContext { get; set; }
public BaseRepository(DapperDbContext _dapperDbContext)
{
dapperDbContext = _dapperDbContext;
}
/// <summary>
/// 批量执行sql带事务
/// </summary>
/// <param name="sqlStrings"></param>
/// <param name="parameterList"></param>
/// <param name="commandTimeout"></param>
/// <returns></returns>
public bool ExecuteTransaction(List<string> sqlStrings, List<DynamicParameters> 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<int> InsertAsync(T entity, string sql)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
var result = await dbConn.ExecuteAsync(sql, entity);
return result;
}
}
public async Task<int> UpdateAsync(T entity, string sql)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
var result = await dbConn.ExecuteAsync(sql, entity);
return result;
}
}
public async Task<int> 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<T> GetAsync(int id, string sql)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
var result = await dbConn.QueryFirstOrDefaultAsync<T>(sql, new { Id = id });
return result;
}
}
public async Task<List<T>> GetListAsync(string sql)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
var result = await Task.Run(() => dbConn.Query<T>(sql).ToList());
return result;
}
}
public async Task<List<T>> GetByDynamicParams(string sql, DynamicParameters dynmicParams)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
var result = await Task.Run(() => dbConn.Query<T>(sql, dynmicParams).ToList());
return result;
}
}
}
}