using System.Data;
using Dapper;
using Microsoft.Data.SqlClient;
using Web.Core.Common.Helper;
namespace Web.Core.Common.Dapper;
public class DapperHelper : IDapperHelper
{
public enum SysName
{
DEV,
PRO,
DataFill,
Canteen
}
///
/// 查出一条记录的实体
///
///
///
///
public T QueryFirstOrDefault(SysName sysName, string sql, object param = null)
{
using var _db = GetDbConnection(sysName);
return _db.QueryFirstOrDefault(sql, param);
}
public async Task QueryFirstOrDefaultAsync(SysName sysName, string sql, object param = null)
{
await using var _db = GetDbConnection(sysName);
return await _db.QueryFirstOrDefaultAsync(sql, param);
}
///
/// 查出多条记录的实体泛型集合
///
/// 泛型T
///
public IEnumerable Query(SysName sysName, string sql, object param = null, IDbTransaction transaction = null,
bool buffered = true, int? commandTimeout = null, CommandType? commandType = null)
{
using var _db = GetDbConnection(sysName);
return _db.Query(sql, param, transaction, buffered, commandTimeout, commandType);
}
public async Task> QueryAsync(SysName sysName, string sql, object param = null,
IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null)
{
await using var _db = GetDbConnection(sysName);
return await _db.QueryAsync(sql, param, transaction, commandTimeout, commandType);
}
public int Execute(SysName sysName, string sql, object param = null, IDbTransaction transaction = null,
int? commandTimeout = null, CommandType? commandType = null)
{
using var _db = GetDbConnection(sysName);
return _db.Execute(sql, param, transaction, commandTimeout, commandType);
}
public async Task ExecuteAsync(SysName sysName, string sql, object param = null,
IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null)
{
await using var _db = GetDbConnection(sysName);
return await _db.ExecuteAsync(sql, param, transaction, commandTimeout, commandType);
}
public T ExecuteScalar(SysName sysName, string sql, object param = null, IDbTransaction transaction = null,
int? commandTimeout = null, CommandType? commandType = null)
{
using var _db = GetDbConnection(sysName);
return _db.ExecuteScalar(sql, param, transaction, commandTimeout, commandType);
}
public async Task ExecuteScalarAsync(SysName sysName, string sql, object param = null,
IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null)
{
await using var _db = GetDbConnection(sysName);
return await _db.ExecuteScalarAsync(sql, param, transaction, commandTimeout, commandType);
}
private SqlConnection GetDbConnection(SysName sysName)
{
SqlConnection db = sysName switch
{
SysName.DEV => new SqlConnection(AppSettings.GetConnectionString("DEV")),
SysName.PRO => new SqlConnection(AppSettings.GetConnectionString("PRO")),
SysName.DataFill => new SqlConnection(AppSettings.GetConnectionString("DataFill")),
SysName.Canteen => new SqlConnection(AppSettings.GetConnectionString("Canteen")),
_ => new SqlConnection(AppSettings.GetConnectionString("Default"))
};
//if (db.State != ConnectionState.Open) db.Open();
return db;
}
}