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#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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