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