Add db.SlaveQueryable

This commit is contained in:
sunkaixuan
2022-05-26 09:57:32 +08:00
parent 591cdfaa50
commit f70d29b25a
7 changed files with 43 additions and 1 deletions

View File

@@ -1478,6 +1478,7 @@ namespace SqlSugar
RestoreMapping();
DataTable result = null;
bool isChangeQueryableMasterSlave = GetIsMasterQuery();
bool isChangeQueryableSlave = GetIsSlaveQuery();
if (IsCache)
{
var cacheService = this.Context.CurrentConnectionConfig.ConfigureExternalServices.DataInfoCacheService;
@@ -1488,6 +1489,7 @@ namespace SqlSugar
result = this.Db.GetDataTable(sqlObj.Key, sqlObj.Value.ToArray());
}
RestChangeMasterQuery(isChangeQueryableMasterSlave);
RestChangeSlaveQuery(isChangeQueryableSlave);
return result;
}
public virtual DataTable ToDataTablePage(int pageIndex, int pageSize)
@@ -3179,10 +3181,12 @@ namespace SqlSugar
List<TResult> result;
var isComplexModel = QueryBuilder.IsComplexModel(sqlObj.Key);
var entityType = typeof(TResult);
bool isChangeQueryableSlave = GetIsSlaveQuery();
bool isChangeQueryableMasterSlave = GetIsMasterQuery();
var dataReader = this.Db.GetDataReader(sqlObj.Key, sqlObj.Value.ToArray());
result = GetData<TResult>(isComplexModel, entityType, dataReader);
RestChangeMasterQuery(isChangeQueryableMasterSlave);
RestChangeSlaveQuery(isChangeQueryableSlave);
return result;
}
@@ -3203,6 +3207,23 @@ namespace SqlSugar
return isChangeQueryableMasterSlave;
}
private void RestChangeSlaveQuery(bool isChangeQueryableSlaveSlave)
{
if (isChangeQueryableSlaveSlave)
this.Context.Ado.IsDisableMasterSlaveSeparation = true;
}
private bool GetIsSlaveQuery()
{
var isChangeQueryableMasterSlave =
this.QueryBuilder.IsEnableMasterSlaveSeparation == true &&
this.Context.Ado.IsDisableMasterSlaveSeparation == true &&
this.Context.Ado.Transaction == null;
if (isChangeQueryableMasterSlave)
this.Context.Ado.IsDisableMasterSlaveSeparation = false;
return isChangeQueryableMasterSlave;
}
protected async Task<List<TResult>> GetDataAsync<TResult>(KeyValuePair<string, List<SugarParameter>> sqlObj)
{
List<TResult> result;
@@ -3354,6 +3375,7 @@ namespace SqlSugar
_Size=it._Size
}).ToList();
}
asyncQueryableBuilder.IsEnableMasterSlaveSeparation = this.QueryBuilder.IsEnableMasterSlaveSeparation;
asyncQueryableBuilder.TranLock = this.QueryBuilder.TranLock;
asyncQueryableBuilder.IsDisableMasterSlaveSeparation = this.QueryBuilder.IsDisableMasterSlaveSeparation;
asyncQueryableBuilder.IsQueryInQuery = this.QueryBuilder.IsQueryInQuery;

View File

@@ -35,6 +35,7 @@ namespace SqlSugar
#region Splicing basic
public string TranLock { get; set; }
public bool IsDisableMasterSlaveSeparation { get; set; }
public bool IsEnableMasterSlaveSeparation { get; set; }
public bool IsQueryInQuery { get; set; }
public List<object> Includes { get; set; }
public List<string> IgnoreColumns { get; set; }

View File

@@ -91,6 +91,13 @@ namespace SqlSugar
result.QueryBuilder.IsDisableMasterSlaveSeparation = true;
return result;
}
public ISugarQueryable<T> SlaveQueryable<T>()
{
var result = this.Queryable<T>();
result.QueryBuilder.IsEnableMasterSlaveSeparation = true;
return result;
}
/// <summary>
/// Lambda Query operation
/// </summary>

View File

@@ -242,6 +242,10 @@ namespace SqlSugar
{
ScopedContext.Open();
}
public ISugarQueryable<T> SlaveQueryable<T>()
{
return ScopedContext.SlaveQueryable<T>();
}
public ISugarQueryable<T> MasterQueryable<T>()
{
return ScopedContext.MasterQueryable<T>();

View File

@@ -69,6 +69,7 @@ namespace SqlSugar
#region Queryable
ISugarQueryable<T> MasterQueryable<T>();
ISugarQueryable<T> SlaveQueryable<T>();
ISugarQueryable<T> SqlQueryable<T>(string sql) where T : class, new();
ISugarQueryable<ExpandoObject> Queryable(string tableName, string shortName);
ISugarQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Queryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(Expression<Func<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, bool>> joinExpression) where T : class, new();

View File

@@ -179,6 +179,10 @@ namespace SqlSugar
{
return this.Context.MasterQueryable<T>();
}
public ISugarQueryable<T> SlaveQueryable<T>()
{
return this.Context.SlaveQueryable<T>();
}
public ISugarQueryable<T> SqlQueryable<T>(string sql) where T : class, new()
{
return this.Context.SqlQueryable<T>(sql);

View File

@@ -228,7 +228,10 @@ namespace SqlSugar
{
ScopedContext.Open();
}
public ISugarQueryable<T> SlaveQueryable<T>()
{
return ScopedContext.SlaveQueryable<T>();
}
public ISugarQueryable<T> MasterQueryable<T>()
{
return ScopedContext.MasterQueryable<T>();