using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Linq.Dynamic.Core;
using System.Linq.Expressions;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using VolPro.Core.Configuration;
using VolPro.Core.Const;
using VolPro.Core.DBManager;
using VolPro.Core.EFDbContext;
using VolPro.Core.Enums;
using VolPro.Core.Extensions;
namespace VolPro.Core.DbSqlSugar
{
public static class SqlSugarRegister
{
///
///系统库链接
///
///
public static ConnectionConfig GetSysConnectionConfig()
{
var dbType = DbManger.GetDbType();
return new ConnectionConfig()
{
DbType = dbType,// SqlSugar.DbType.SqlServer,
ConnectionString = DBServerProvider.SysConnectingString,
IsAutoCloseConnection = true,
ConfigId = "default",
MoreSettings = new ConnMoreSettings()
{
PgSqlIsAutoToLower = false,
IsAutoToUpper = false,
// DatabaseModel = DbType.PostgreSQL
},
ConfigureExternalServices = GetConfigureExternalServices()
};
}
///
/// 模板空库(租户动态分才使用)
///
///
private static ConnectionConfig GetEmptyConnectionConfig()
{
//Console.WriteLine(AppSetting.GetSection("Connection")["EmptyDbContext"]);
var dbType = DbManger.GetDbType();
//模板空库(租户动态分才使用)
return new ConnectionConfig()
{
DbType = dbType,// SqlSugar.DbType.SqlServer,
ConnectionString = AppSetting.GetSection("Connection")["EmptyDbContext"],
IsAutoCloseConnection = true,
ConfigId = "EmptyDbContext",
MoreSettings = new ConnMoreSettings()
{
PgSqlIsAutoToLower = false,
IsAutoToUpper = false
},
ConfigureExternalServices = GetConfigureExternalServices()
};
}
public static IServiceCollection UseSqlSugar(this IServiceCollection services)
{
StaticConfig.DynamicExpressionParserType = typeof(DynamicExpressionParser);
services.AddHttpContextAccessor();
var dbType = DbManger.GetDbType();
//缓存所有配置文件的中的数据库链接
var configs = DbRelativeCache.DbContextConnection
.Where(x => x.Key.EndsWith("DbContext") || x.Key == "default").Select(s => new ConnectionConfig()
{
//2024.01.22增加分库使用不同类型的数据库
DbType = SqlSugarDbType.GetType(s.Key),// SqlSugar.DbType.SqlServer,
ConnectionString = s.Value,
IsAutoCloseConnection = true,
ConfigId = s.Key,
MoreSettings = new ConnMoreSettings()
{
PgSqlIsAutoToLower = false,
IsAutoToUpper = false
},
//https://www.donet5.com/Home/Doc?typeId=1182
ConfigureExternalServices = GetConfigureExternalServices()
}).ToList();
configs.Add(GetEmptyConnectionConfig());
services.AddSingleton(s =>
{
var sysConfig = GetSysConnectionConfig();
SqlSugarScope sqlSugar = new SqlSugarScope(
configs,
db =>
{
//业务库日志
foreach (var item in configs.Where(x => x.ConfigId?.ToString() != "SysDbContext"))
{
string id = item.ConfigId.ToString();
if (db.GetConnection(id) != null)
{
db.GetConnection(id).Aop.OnLogExecuting = (sql, pars) =>
{
Console.WriteLine(sql);
};
}
};
//单例参数配置,所有上下文生效
db.Aop.OnLogExecuting = (sql, pars) =>
{
Console.WriteLine(sql);
};
});
return sqlSugar;
});
return services;
}
///
/// 设置字段全大写
///
///
private static ConfigureExternalServices GetConfigureExternalServices()
{
//https://www.donet5.com/Home/Doc?typeId=1182
return new ConfigureExternalServices()
{
EntityService = (property, column) =>
{
if (DBType.Name == "DM")
{
// var attributes = property.GetCustomAttributes(true);//get all attributes
column.DbColumnName = property.Name.ToUpper();
}
}
};
}
}
}