Files
SecMPS/api_sqlsugar/VolPro.Core/Generic/GenericBaseService.cs
2026-05-15 23:22:48 +08:00

165 lines
5.3 KiB
C#

using Dapper;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using VolPro.Core.Controllers.Basic;
using VolPro.Core.Dapper;
using VolPro.Core.DBManager;
using VolPro.Core.DbSqlSugar;
using VolPro.Core.EFDbContext;
using VolPro.Core.Filters;
using VolPro.Core.UserManager;
using VolPro.Core.Utilities;
namespace VolPro.Core.Generic
{
public class GenericBaseService
{
public WebResponseContent WebResponse { get; set; }
public GenericBaseService()
{
WebResponse = new WebResponseContent();
}
public int DbParamsCount
{
get
{
return DbRelativeCache.GetDbType(TableInfo.DBServer) == "MsSql" ? 2000 : 100000;
}
}
private UserManager.TableInfo _tableInfo { get; set; }
public UserManager.TableInfo TableInfo
{
get
{
if (_tableInfo != null) return _tableInfo;
_tableInfo = TableColumnContext.TableInfo
.Where(x => x.TableName == GenericTableAsyncLocal.CurrentTableName)
.FirstOrDefault();
if (_tableInfo == null) throw new Exception($" 未找到表【{GenericTableAsyncLocal.CurrentTableName}】 配置信息");
if (string.IsNullOrEmpty(_tableInfo.DBServer))
{
_tableInfo.DBServer = typeof(SysDbContext).Name;
}
return _tableInfo;
}
}
public UserManager.TableInfo GetDetailTableInfo(string tableName = null)
{
if (string.IsNullOrEmpty(TableInfo.DetailName))
{
return null;
}
//主从表
if (string.IsNullOrEmpty(tableName))
{
return TableColumnContext.TableInfo.Where(x => x.TableName == TableInfo.DetailName).FirstOrDefault();
}
//一对多
return TableColumnContext.TableInfo.Where(x => x.TableName == tableName).FirstOrDefault();
}
public UserManager.TableInfo GetTableInfo(string tableName = null)
{
return TableColumnContext.TableInfo.Where(x => x.TableName == tableName).FirstOrDefault();
}
private BaseDbContext _dbContext { get; set; }
public BaseDbContext DbContext
{
get
{
if (_dbContext != null) return _dbContext;
string dbServer = _tableInfo.DBServer;
var type = DbRelativeCache.GetDbContextType(dbServer);
object dbObj = HttpContext.Current.RequestServices.GetService(type);
_dbContext = (BaseDbContext)dbObj;
return _dbContext;
}
}
private List<TableColumnField> _columns { get; set; }
public List<TableColumnField> Columns
{
get
{
if (_columns != null) return _columns;
_columns = TableColumnContext.Data
.Where(x => x.TableName == GenericTableAsyncLocal.CurrentTableName)
.ToList();
return _columns;
}
}
/// <summary>
/// 实际表字段
/// </summary>
private List<TableColumnField> _tableColumns { get; set; }
public List<TableColumnField> TableColumns
{
get
{
if (_tableColumns != null) return _tableColumns;
_tableColumns = Columns.Where(x => x.ReferenceField == 0).ToList();
return _tableColumns;
}
}
public List<TableColumnField> GetTableColumns(string table)
{
return TableColumnContext.Data
.Where(x => x.TableName == table)
.ToList();
}
private ISqlSugarClient _genericDbContext { get; set; }
public ISqlSugarClient GenericDbContext
{
get
{
if (_genericDbContext == null)
{
_genericDbContext = DbManger.GetSqlSugarClient(TableInfo.DBServer);
}
return _genericDbContext;
}
}
public async Task<List<dynamic>> QueryListAsync(string sql, List<SugarParameter> parameters)
{
return await GenericDbContext.Ado.SqlQueryAsync<dynamic>(sql, parameters);
}
public async Task<object> ExecuteScalarAsync(string sql, List<SugarParameter> parameters)
{
return await GenericDbContext.Ado.GetScalarAsync(sql, parameters);
}
public async Task<int> ExcuteNonQueryAsync(string sql, object parameters)
{
return await GenericDbContext.Ado.ExecuteCommandAsync(sql, parameters);
}
public async Task BeginTranAsync()
{
await GenericDbContext.Ado.BeginTranAsync();
}
public async Task CommitTranAsync()
{
await GenericDbContext.Ado.CommitTranAsync();
}
public async Task RollbackTranAsync()
{
await GenericDbContext.Ado.RollbackTranAsync();
}
}
}