|
|
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;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|