using Microsoft.Extensions.DependencyInjection;
using System;
using StackExchange.Profiling;
using FreeSql;
using FreeSql.Internal.CommonProvider;
using ZhonTai.Admin.Core.Auth;
using ZhonTai.Admin.Core.Configs;
using ZhonTai.Admin.Core.Dto;
using ZhonTai.Admin.Core.Entities;
using ZhonTai.Admin.Domain.Tenant;
using ZhonTai.Admin.Core.Consts;
using ZhonTai.Admin.Core.Db.Transaction;
namespace ZhonTai.Admin.Core.Db;
public static class FreeSqlCloudExtesions
{
///
/// 创建FreeSql实例
///
///
///
///
///
///
private static IFreeSql CreateFreeSql(IUser user, AppConfig appConfig, DbConfig dbConfig, CreateFreeSqlTenantDto tenant)
{
var freeSqlBuilder = new FreeSqlBuilder()
.UseConnectionString(tenant.DbType.Value, tenant.ConnectionString)
.UseAutoSyncStructure(false)
.UseLazyLoading(false)
.UseNoneCommandParameter(true);
#region 监听所有命令
if (dbConfig.MonitorCommand)
{
freeSqlBuilder.UseMonitorCommand(cmd => { }, (cmd, traceLog) =>
{
Console.WriteLine($"{cmd.CommandText}\r\n");
});
}
#endregion 监听所有命令
var fsql = freeSqlBuilder.Build();
fsql.GlobalFilter.Apply(FilterNames.Delete, a => a.IsDeleted == false);
//配置实体
DbHelper.ConfigEntity(fsql, appConfig);
#region 监听Curd操作
if (dbConfig.Curd)
{
fsql.Aop.CurdBefore += (s, e) =>
{
if (appConfig.MiniProfiler)
{
MiniProfiler.Current.CustomTiming("CurdBefore", e.Sql);
}
Console.WriteLine($"{e.Sql}\r\n");
};
fsql.Aop.CurdAfter += (s, e) =>
{
if (appConfig.MiniProfiler)
{
MiniProfiler.Current.CustomTiming("CurdAfter", $"{e.ElapsedMilliseconds}");
}
Console.WriteLine($"{e.Sql}\r\n");
};
}
#endregion 监听Curd操作
#region 审计数据
//计算服务器时间
var selectProvider = fsql.Select