|
@@ -20,171 +20,6 @@ namespace ZhonTai.Admin.Core.Db;
|
|
|
|
|
|
public static class DBServiceCollectionExtensions
|
|
|
{
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- private static void RegisterDb(
|
|
|
- FreeSqlCloud freeSqlCloud,
|
|
|
- IUser user,
|
|
|
- DbConfig dbConfig,
|
|
|
- AppConfig appConfig,
|
|
|
- HostAppOptions hostAppOptions
|
|
|
- )
|
|
|
- {
|
|
|
-
|
|
|
- freeSqlCloud.Register(dbConfig.Key, () =>
|
|
|
- {
|
|
|
-
|
|
|
- if (dbConfig.CreateDb)
|
|
|
- {
|
|
|
- DbHelper.CreateDatabaseAsync(dbConfig).Wait();
|
|
|
- }
|
|
|
-
|
|
|
- var providerType = dbConfig.ProviderType.NotNull() ? Type.GetType(dbConfig.ProviderType) : null;
|
|
|
- var freeSqlBuilder = new FreeSqlBuilder()
|
|
|
- .UseConnectionString(dbConfig.Type, dbConfig.ConnectionString, providerType)
|
|
|
- .UseAutoSyncStructure(false)
|
|
|
- .UseLazyLoading(false)
|
|
|
- .UseNoneCommandParameter(true);
|
|
|
-
|
|
|
- if (dbConfig.SlaveList?.Length > 0)
|
|
|
- {
|
|
|
- var slaveList = dbConfig.SlaveList.Select(a => a.ConnectionString).ToArray();
|
|
|
- var slaveWeightList = dbConfig.SlaveList.Select(a => a.Weight).ToArray();
|
|
|
- freeSqlBuilder.UseSlave(slaveList).UseSlaveWeight(slaveWeightList);
|
|
|
- }
|
|
|
-
|
|
|
- hostAppOptions?.ConfigureFreeSqlBuilder?.Invoke(freeSqlBuilder);
|
|
|
-
|
|
|
- #region 监听所有命令
|
|
|
-
|
|
|
- if (dbConfig.MonitorCommand)
|
|
|
- {
|
|
|
- freeSqlBuilder.UseMonitorCommand(cmd => { }, (cmd, traceLog) =>
|
|
|
- {
|
|
|
-
|
|
|
- Console.WriteLine($"{cmd.CommandText}{Environment.NewLine}");
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- #endregion 监听所有命令
|
|
|
-
|
|
|
- var fsql = freeSqlBuilder.Build();
|
|
|
-
|
|
|
-
|
|
|
- fsql.GlobalFilter.ApplyOnly<IDelete>(FilterNames.Delete, a => a.IsDeleted == false);
|
|
|
-
|
|
|
-
|
|
|
- if (appConfig.Tenant)
|
|
|
- {
|
|
|
- fsql.GlobalFilter.ApplyOnlyIf<ITenant>(FilterNames.Tenant, () => user?.Id > 0, a => a.TenantId == user.TenantId);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- fsql.GlobalFilter.ApplyOnlyIf<IData>(FilterNames.Self,
|
|
|
- () =>
|
|
|
- {
|
|
|
- if (!(user?.Id > 0))
|
|
|
- return false;
|
|
|
- var dataPermission = user.DataPermission;
|
|
|
- if (user.Type == UserType.DefaultUser && dataPermission != null)
|
|
|
- return dataPermission.DataScope != DataScope.All && dataPermission.OrgIds.Count == 0;
|
|
|
- return false;
|
|
|
- },
|
|
|
- a => a.OwnerId == user.Id
|
|
|
- );
|
|
|
- fsql.GlobalFilter.ApplyOnlyIf<IData>(FilterNames.Data,
|
|
|
- () =>
|
|
|
- {
|
|
|
- if (!(user?.Id > 0))
|
|
|
- return false;
|
|
|
- var dataPermission = user.DataPermission;
|
|
|
- if (user.Type == UserType.DefaultUser && dataPermission != null)
|
|
|
- return dataPermission.DataScope != DataScope.All && dataPermission.OrgIds.Count > 0;
|
|
|
- return false;
|
|
|
- },
|
|
|
- a => a.OwnerId == user.Id || user.DataPermission.OrgIds.Contains(a.OwnerOrgId.Value)
|
|
|
- );
|
|
|
-
|
|
|
-
|
|
|
- DbHelper.ConfigEntity(fsql, appConfig, dbConfig);
|
|
|
-
|
|
|
- hostAppOptions?.ConfigureFreeSql?.Invoke(fsql);
|
|
|
-
|
|
|
- #region 初始化数据库
|
|
|
-
|
|
|
-
|
|
|
- if (dbConfig.SyncStructure)
|
|
|
- {
|
|
|
- DbHelper.SyncStructure(fsql, dbConfig: dbConfig, appConfig: appConfig);
|
|
|
- }
|
|
|
-
|
|
|
- #region 审计数据
|
|
|
-
|
|
|
-
|
|
|
- var serverTime = fsql.Ado.QuerySingle(() => DateTime.UtcNow);
|
|
|
- var timeOffset = DateTime.UtcNow.Subtract(serverTime);
|
|
|
- DbHelper.TimeOffset = timeOffset;
|
|
|
- fsql.Aop.AuditValue += (s, e) =>
|
|
|
- {
|
|
|
- DbHelper.AuditValue(e, timeOffset, user);
|
|
|
- };
|
|
|
-
|
|
|
- #endregion 审计数据
|
|
|
-
|
|
|
-
|
|
|
- if (dbConfig.SyncData)
|
|
|
- {
|
|
|
- DbHelper.SyncDataAsync(fsql, dbConfig, appConfig).Wait();
|
|
|
- }
|
|
|
-
|
|
|
- #endregion 初始化数据库
|
|
|
-
|
|
|
-
|
|
|
- if (dbConfig.GenerateData && !dbConfig.CreateDb && !dbConfig.SyncData)
|
|
|
- {
|
|
|
- DbHelper.GenerateDataAsync(fsql, appConfig, dbConfig).Wait();
|
|
|
- }
|
|
|
-
|
|
|
- #region 监听Curd操作
|
|
|
-
|
|
|
- if (dbConfig.Curd)
|
|
|
- {
|
|
|
- fsql.Aop.CurdBefore += (s, e) =>
|
|
|
- {
|
|
|
- if (appConfig.MiniProfiler)
|
|
|
- {
|
|
|
- MiniProfiler.Current.CustomTiming("CurdBefore", e.Sql);
|
|
|
- }
|
|
|
- Console.WriteLine($"{e.Sql}{Environment.NewLine}");
|
|
|
- };
|
|
|
- fsql.Aop.CurdAfter += (s, e) =>
|
|
|
- {
|
|
|
- if (appConfig.MiniProfiler)
|
|
|
- {
|
|
|
- MiniProfiler.Current.CustomTiming("CurdAfter", $"{e.ElapsedMilliseconds}");
|
|
|
- }
|
|
|
- };
|
|
|
- }
|
|
|
-
|
|
|
- #endregion 监听Curd操作
|
|
|
-
|
|
|
- return fsql;
|
|
|
- });
|
|
|
-
|
|
|
-
|
|
|
- var fsql = freeSqlCloud.Use(dbConfig.Key);
|
|
|
- if (dbConfig.SyncStructure)
|
|
|
- {
|
|
|
- var _ = fsql.CodeFirst;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
|
|
|
|
|
|
|
|
@@ -198,18 +33,14 @@ public static class DBServiceCollectionExtensions
|
|
|
var appConfig = ConfigHelper.Get<AppConfig>("appconfig", env.EnvironmentName);
|
|
|
var user = services.BuildServiceProvider().GetService<IUser>();
|
|
|
var freeSqlCloud = appConfig.DistributeKey.IsNull() ? new FreeSqlCloud() : new FreeSqlCloud(appConfig.DistributeKey);
|
|
|
- if (dbConfig.Key.NotNull())
|
|
|
- {
|
|
|
- DbKeys.MasterDb = dbConfig.Key;
|
|
|
- }
|
|
|
- RegisterDb(freeSqlCloud, user, dbConfig, appConfig, hostAppOptions);
|
|
|
+ DbHelper.RegisterDb(freeSqlCloud, user, dbConfig, appConfig, hostAppOptions);
|
|
|
|
|
|
|
|
|
if (dbConfig.Dbs?.Length > 0)
|
|
|
{
|
|
|
foreach (var db in dbConfig.Dbs)
|
|
|
{
|
|
|
- RegisterDb(freeSqlCloud, user, db, appConfig, null);
|
|
|
+ DbHelper.RegisterDb(freeSqlCloud, user, db, appConfig, null);
|
|
|
}
|
|
|
}
|
|
|
|