From 0d698ef24fef387325f839380a9ed9660122e9e5 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Thu, 12 May 2022 09:15:51 +0800 Subject: [PATCH] Add db.MasterQueryable --- .../QueryableProvider/QueryableProvider.cs | 23 +++++++++++++++++++ .../SqlBuilderProvider/QueryBuilder.cs | 1 + .../SugarProvider/SqlSugarProvider.cs | 6 +++++ .../SugarProvider/SqlSugarScopeProvider.cs | 5 +++- .../SqlSugar/Interface/ISqlSugarClient.cs | 1 + Src/Asp.NetCore2/SqlSugar/SqlSugarClient.cs | 4 ++++ Src/Asp.NetCore2/SqlSugar/SqlSugarScope.cs | 4 ++++ 7 files changed, 43 insertions(+), 1 deletion(-) diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs index d13a76463..d85ea9278 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs @@ -1415,6 +1415,7 @@ namespace SqlSugar var sqlObj = this.ToSql(); RestoreMapping(); DataTable result = null; + bool isChangeQueryableMasterSlave = GetIsMasterQuery(); if (IsCache) { var cacheService = this.Context.CurrentConnectionConfig.ConfigureExternalServices.DataInfoCacheService; @@ -1424,6 +1425,7 @@ namespace SqlSugar { result = this.Db.GetDataTable(sqlObj.Key, sqlObj.Value.ToArray()); } + RestChangeMasterQuery(isChangeQueryableMasterSlave); return result; } public virtual DataTable ToDataTablePage(int pageIndex, int pageSize) @@ -3069,10 +3071,30 @@ namespace SqlSugar List result; var isComplexModel = QueryBuilder.IsComplexModel(sqlObj.Key); var entityType = typeof(TResult); + bool isChangeQueryableMasterSlave = GetIsMasterQuery(); var dataReader = this.Db.GetDataReader(sqlObj.Key, sqlObj.Value.ToArray()); result = GetData(isComplexModel, entityType, dataReader); + RestChangeMasterQuery(isChangeQueryableMasterSlave); return result; } + + private void RestChangeMasterQuery(bool isChangeQueryableMasterSlave) + { + if (isChangeQueryableMasterSlave) + this.Context.Ado.IsDisableMasterSlaveSeparation = false; + } + + private bool GetIsMasterQuery() + { + var isChangeQueryableMasterSlave = + this.QueryBuilder.IsDisableMasterSlaveSeparation == true && + this.Context.Ado.IsDisableMasterSlaveSeparation == false && + this.Context.Ado.Transaction == null; + if (isChangeQueryableMasterSlave) + this.Context.Ado.IsDisableMasterSlaveSeparation = true; + return isChangeQueryableMasterSlave; + } + protected async Task> GetDataAsync(KeyValuePair> sqlObj) { List result; @@ -3224,6 +3246,7 @@ namespace SqlSugar _Size=it._Size }).ToList(); } + asyncQueryableBuilder.IsDisableMasterSlaveSeparation = this.QueryBuilder.IsDisableMasterSlaveSeparation; asyncQueryableBuilder.IsQueryInQuery = this.QueryBuilder.IsQueryInQuery; asyncQueryableBuilder.Includes = this.QueryBuilder.Includes; asyncQueryableBuilder.Take = this.QueryBuilder.Take; diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs index 89f2628c1..91e56ce67 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs @@ -33,6 +33,7 @@ namespace SqlSugar #endregion #region Splicing basic + public bool IsDisableMasterSlaveSeparation { get; set; } public bool IsQueryInQuery { get; set; } public List Includes { get; set; } public List IgnoreColumns { get; set; } diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs index a4d076646..87ef3ce4d 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs @@ -85,6 +85,12 @@ namespace SqlSugar var sqlBuilder = InstanceFactory.GetSqlbuilder(this.Context.CurrentConnectionConfig); return this.Ado.GetDateTime(sqlBuilder.FullSqlDateNow); } + public ISugarQueryable MasterQueryable() + { + var result = this.Queryable(); + result.QueryBuilder.IsDisableMasterSlaveSeparation = true; + return result; + } /// /// Lambda Query operation /// diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/SugarProvider/SqlSugarScopeProvider.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/SugarProvider/SqlSugarScopeProvider.cs index 9f7ca1385..42de4e6e8 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/SugarProvider/SqlSugarScopeProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/SugarProvider/SqlSugarScopeProvider.cs @@ -233,7 +233,10 @@ namespace SqlSugar { ScopedContext.Open(); } - + public ISugarQueryable MasterQueryable() + { + return ScopedContext.MasterQueryable(); + } public ISugarQueryable Queryable(string tableName, string shortName) { return ScopedContext.Queryable(tableName, shortName); diff --git a/Src/Asp.NetCore2/SqlSugar/Interface/ISqlSugarClient.cs b/Src/Asp.NetCore2/SqlSugar/Interface/ISqlSugarClient.cs index faf50eaf9..15165f4b5 100644 --- a/Src/Asp.NetCore2/SqlSugar/Interface/ISqlSugarClient.cs +++ b/Src/Asp.NetCore2/SqlSugar/Interface/ISqlSugarClient.cs @@ -66,6 +66,7 @@ namespace SqlSugar #endregion #region Queryable + ISugarQueryable MasterQueryable(); ISugarQueryable SqlQueryable(string sql) where T : class, new(); ISugarQueryable Queryable(string tableName, string shortName); ISugarQueryable Queryable(Expression> joinExpression) where T : class, new(); diff --git a/Src/Asp.NetCore2/SqlSugar/SqlSugarClient.cs b/Src/Asp.NetCore2/SqlSugar/SqlSugarClient.cs index 767aee07a..3a8886064 100644 --- a/Src/Asp.NetCore2/SqlSugar/SqlSugarClient.cs +++ b/Src/Asp.NetCore2/SqlSugar/SqlSugarClient.cs @@ -126,6 +126,10 @@ namespace SqlSugar } #endregion + public ISugarQueryable MasterQueryable() + { + return this.Context.MasterQueryable(); + } public ISugarQueryable SqlQueryable(string sql) where T : class, new() { return this.Context.SqlQueryable(sql); diff --git a/Src/Asp.NetCore2/SqlSugar/SqlSugarScope.cs b/Src/Asp.NetCore2/SqlSugar/SqlSugarScope.cs index 679e6b37e..62f6d527f 100644 --- a/Src/Asp.NetCore2/SqlSugar/SqlSugarScope.cs +++ b/Src/Asp.NetCore2/SqlSugar/SqlSugarScope.cs @@ -220,6 +220,10 @@ namespace SqlSugar ScopedContext.Open(); } + public ISugarQueryable MasterQueryable() + { + return ScopedContext.MasterQueryable(); + } public ISugarQueryable Queryable(string tableName, string shortName) { return ScopedContext.Queryable(tableName,shortName);