using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Threading.Tasks;
using StackExchange.Profiling;
using FreeSql;
using FreeSql.Internal.CommonProvider;
using ZhonTai.Common.Helpers;
using ZhonTai.Admin.Core.Configs;
using ZhonTai.Admin.Core.Entities;
using ZhonTai.Admin.Core.Dbs;
using ZhonTai.Admin.Core.Auth;
namespace ZhonTai.Admin.Core.Db
{
public static class DBServiceCollectionExtensions
{
///
/// 添加数据库
///
///
///
public async static Task AddDbAsync(this IServiceCollection services, IHostEnvironment env)
{
services.AddScoped();
var dbConfig = ConfigHelper.Get("dbconfig", env.EnvironmentName);
//创建数据库
if (dbConfig.CreateDb)
{
await DbHelper.CreateDatabaseAsync(dbConfig);
}
#region FreeSql
var freeSqlBuilder = new FreeSqlBuilder()
.UseConnectionString(dbConfig.Type, dbConfig.ConnectionString)
.UseAutoSyncStructure(false)
.UseLazyLoading(false)
.UseNoneCommandParameter(true);
#region 监听所有命令
if (dbConfig.MonitorCommand)
{
freeSqlBuilder.UseMonitorCommand(cmd => { }, (cmd, traceLog) =>
{
//Console.WriteLine($"{cmd.CommandText}\n{traceLog}\r\n");
Console.WriteLine($"{cmd.CommandText}\r\n");
});
}
#endregion 监听所有命令
var fsql = freeSqlBuilder.Build();
fsql.GlobalFilter.Apply("SoftDelete", a => a.IsDeleted == false);
//配置实体
var appConfig = ConfigHelper.Get("appconfig", env.EnvironmentName);
DbHelper.ConfigEntity(fsql, appConfig);
#region 初始化数据库
//同步结构
if (dbConfig.SyncStructure)
{
DbHelper.SyncStructure(fsql, dbConfig: dbConfig, appConfig: appConfig);
}
var user = services.BuildServiceProvider().GetService();
#region 审计数据
//计算服务器时间
var selectProvider = fsql.Select