mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-05-15 20:49:31 +08:00
Synchronization code
This commit is contained in:
parent
a23c241a8e
commit
c2cc1f064a
@ -16,6 +16,8 @@ namespace SqlSugar
|
||||
navigat.SelectR1 = SelectR1;
|
||||
navigat.Expressions = expressions;
|
||||
navigat.Context = this.Context;
|
||||
navigat.IsCrossQueryWithAttr = this.QueryBuilder.IsCrossQueryWithAttr;
|
||||
navigat.CrossQueryItems = this.QueryBuilder.CrossQueryItems;
|
||||
if (this.QueryBuilder.Includes == null) this.QueryBuilder.Includes = new List<object>();
|
||||
this.QueryBuilder.Includes.Add(navigat);
|
||||
}
|
||||
@ -26,6 +28,8 @@ namespace SqlSugar
|
||||
var navigat = new NavigatManager<T>();
|
||||
navigat.SelectR1 = SelectR1;
|
||||
navigat.SelectR2 = SelectR2;
|
||||
navigat.IsCrossQueryWithAttr = this.QueryBuilder.IsCrossQueryWithAttr;
|
||||
navigat.CrossQueryItems = this.QueryBuilder.CrossQueryItems;
|
||||
navigat.Expressions = expressions;
|
||||
navigat.Context = this.Context;
|
||||
if (this.QueryBuilder.Includes == null) this.QueryBuilder.Includes = new List<object>();
|
||||
@ -40,6 +44,8 @@ namespace SqlSugar
|
||||
navigat.SelectR1 = SelectR1;
|
||||
navigat.SelectR2 = SelectR2;
|
||||
navigat.SelectR3 = SelectR3;
|
||||
navigat.IsCrossQueryWithAttr = this.QueryBuilder.IsCrossQueryWithAttr;
|
||||
navigat.CrossQueryItems = this.QueryBuilder.CrossQueryItems;
|
||||
navigat.Expressions = expressions;
|
||||
navigat.Context = this.Context;
|
||||
if (this.QueryBuilder.Includes == null) this.QueryBuilder.Includes = new List<object>();
|
||||
@ -69,6 +75,8 @@ namespace SqlSugar
|
||||
navigat.SelectR1 = SelectR1;
|
||||
navigat.Expressions = expressions;
|
||||
navigat.Context = this.Context;
|
||||
navigat.IsCrossQueryWithAttr = this.QueryBuilder.IsCrossQueryWithAttr;
|
||||
navigat.CrossQueryItems = this.QueryBuilder.CrossQueryItems;
|
||||
if (this.QueryBuilder.Includes == null) this.QueryBuilder.Includes = new List<object>();
|
||||
this.QueryBuilder.Includes.Add(navigat);
|
||||
}
|
||||
@ -80,6 +88,8 @@ namespace SqlSugar
|
||||
navigat.SelectR1 = SelectR1;
|
||||
navigat.SelectR2 = SelectR2;
|
||||
navigat.Expressions = expressions;
|
||||
navigat.IsCrossQueryWithAttr = this.QueryBuilder.IsCrossQueryWithAttr;
|
||||
navigat.CrossQueryItems = this.QueryBuilder.CrossQueryItems;
|
||||
navigat.Context = this.Context;
|
||||
if (this.QueryBuilder.Includes == null) this.QueryBuilder.Includes = new List<object>();
|
||||
this.QueryBuilder.Includes.Add(navigat);
|
||||
@ -94,6 +104,8 @@ namespace SqlSugar
|
||||
navigat.SelectR2 = SelectR2;
|
||||
navigat.SelectR3 = SelectR3;
|
||||
navigat.Expressions = expressions;
|
||||
navigat.IsCrossQueryWithAttr = this.QueryBuilder.IsCrossQueryWithAttr;
|
||||
navigat.CrossQueryItems = this.QueryBuilder.CrossQueryItems;
|
||||
navigat.Context = this.Context;
|
||||
if (this.QueryBuilder.Includes == null) this.QueryBuilder.Includes = new List<object>();
|
||||
this.QueryBuilder.Includes.Add(navigat);
|
||||
@ -110,6 +122,8 @@ namespace SqlSugar
|
||||
navigat.SelectR3 = SelectR3;
|
||||
navigat.SelectR4 = SelectR4;
|
||||
navigat.Expressions = expressions;
|
||||
navigat.IsCrossQueryWithAttr = this.QueryBuilder.IsCrossQueryWithAttr;
|
||||
navigat.CrossQueryItems = this.QueryBuilder.CrossQueryItems;
|
||||
navigat.Context = this.Context;
|
||||
if (this.QueryBuilder.Includes == null) this.QueryBuilder.Includes = new List<object>();
|
||||
this.QueryBuilder.Includes.Add(navigat);
|
||||
@ -128,6 +142,8 @@ namespace SqlSugar
|
||||
navigat.SelectR4 = SelectR4;
|
||||
navigat.SelectR5 = SelectR5;
|
||||
navigat.Expressions = expressions;
|
||||
navigat.IsCrossQueryWithAttr = this.QueryBuilder.IsCrossQueryWithAttr;
|
||||
navigat.CrossQueryItems = this.QueryBuilder.CrossQueryItems;
|
||||
navigat.Context = this.Context;
|
||||
if (this.QueryBuilder.Includes == null) this.QueryBuilder.Includes = new List<object>();
|
||||
this.QueryBuilder.Includes.Add(navigat);
|
||||
@ -148,6 +164,8 @@ namespace SqlSugar
|
||||
navigat.SelectR5 = SelectR5;
|
||||
navigat.SelectR6 = SelectR6;
|
||||
navigat.Expressions = expressions;
|
||||
navigat.IsCrossQueryWithAttr = this.QueryBuilder.IsCrossQueryWithAttr;
|
||||
navigat.CrossQueryItems = this.QueryBuilder.CrossQueryItems;
|
||||
navigat.Context = this.Context;
|
||||
if (this.QueryBuilder.Includes == null) this.QueryBuilder.Includes = new List<object>();
|
||||
this.QueryBuilder.Includes.Add(navigat);
|
||||
@ -170,6 +188,8 @@ namespace SqlSugar
|
||||
navigat.SelectR6 = SelectR6;
|
||||
navigat.SelectR7 = SelectR7;
|
||||
navigat.Expressions = expressions;
|
||||
navigat.IsCrossQueryWithAttr = this.QueryBuilder.IsCrossQueryWithAttr;
|
||||
navigat.CrossQueryItems = this.QueryBuilder.CrossQueryItems;
|
||||
navigat.Context = this.Context;
|
||||
if (this.QueryBuilder.Includes == null) this.QueryBuilder.Includes = new List<object>();
|
||||
this.QueryBuilder.Includes.Add(navigat);
|
||||
|
@ -3,6 +3,7 @@ using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
@ -11,6 +12,8 @@ namespace SqlSugar
|
||||
public class NavigatManager<T>
|
||||
{
|
||||
public SqlSugarProvider Context { get; set; }
|
||||
public bool IsCrossQueryWithAttr { get; set; }
|
||||
public Dictionary<string, string> CrossQueryItems { get; set; }
|
||||
public Func<ISugarQueryable<object>, List<object>> SelectR1 { get; set; }
|
||||
public Func<ISugarQueryable<object>, List<object>> SelectR2 { get; set; }
|
||||
public Func<ISugarQueryable<object>, List<object>> SelectR3 { get; set; }
|
||||
@ -202,7 +205,9 @@ namespace SqlSugar
|
||||
var bEntityInfo = this.Context.EntityMaintenance.GetEntityInfo(bEntity);
|
||||
var bPkColumn = bEntityInfo.Columns.FirstOrDefault(it => it.IsPrimarykey);
|
||||
Check.ExceptionEasy(bPkColumn==null, $"{bEntityInfo.EntityName} need primary key", $"{bEntityInfo.EntityName} 实体需要配置主键");
|
||||
this.Context.InitMappingInfo(bEntity);
|
||||
var bDb = this.Context;
|
||||
bDb = GetCrossDatabase(bDb,bEntity);
|
||||
bDb.InitMappingInfo(bEntity);
|
||||
var listItemPkColumn = listItemEntity.Columns.Where(it => it.IsPrimarykey).FirstOrDefault();
|
||||
Check.ExceptionEasy(listItemPkColumn == null, $"{listItemEntity.EntityName} need primary key", $"{listItemEntity.EntityName} 实体需要配置主键");
|
||||
var ids = list.Select(it => it.GetType().GetProperty(listItemPkColumn.PropertyName).GetValue(it)).Select(it => it == null ? "null" : it).Distinct().ToList();
|
||||
@ -217,7 +222,9 @@ namespace SqlSugar
|
||||
FieldValue = String.Join(",", ids),
|
||||
CSharpTypeName = aColumn.PropertyInfo.PropertyType.Name
|
||||
}));
|
||||
var queryable = this.Context.Queryable<object>();
|
||||
var abDb = this.Context;
|
||||
abDb = GetCrossDatabase(abDb, mappingEntity.Type);
|
||||
var queryable = abDb.Queryable<object>();
|
||||
var abids = queryable.AS(mappingEntity.DbTableName).Filter(mappingEntity.Type).Where(conditionalModels).Select<SugarAbMapping>($"{queryable.SqlBuilder.GetTranslationColumnName(aColumn.DbColumnName)} as aid,{queryable.SqlBuilder.GetTranslationColumnName(bColumn.DbColumnName)} as bid").ToList();
|
||||
|
||||
List<IConditionalModel> conditionalModels2 = new List<IConditionalModel>();
|
||||
@ -229,7 +236,7 @@ namespace SqlSugar
|
||||
CSharpTypeName = bColumn.PropertyInfo.PropertyType.Name
|
||||
}));
|
||||
var sql = GetWhereSql();
|
||||
var bList = selector(this.Context.Queryable<object>().AS(bEntityInfo.DbTableName).Filter(bEntityInfo.Type).AddParameters(sql.Parameters).Where(conditionalModels2).WhereIF(sql.WhereString.HasValue(),sql.WhereString).Select(sql.SelectString).OrderByIF(sql.OrderByString.HasValue(),sql.OrderByString));
|
||||
var bList = selector(bDb.Queryable<object>().AS(bEntityInfo.DbTableName).Filter(bEntityInfo.Type).AddParameters(sql.Parameters).Where(conditionalModels2).WhereIF(sql.WhereString.HasValue(),sql.WhereString).Select(sql.SelectString).OrderByIF(sql.OrderByString.HasValue(),sql.OrderByString));
|
||||
if (bList.HasValue())
|
||||
{
|
||||
foreach (var listItem in list)
|
||||
@ -309,8 +316,10 @@ namespace SqlSugar
|
||||
var navColumn = listItemEntity.Columns.FirstOrDefault(it => it.PropertyName == navObjectNameColumnInfo.Navigat.Name);
|
||||
Check.ExceptionEasy(navColumn == null, "OneToOne navigation configuration error", $"OneToOne导航配置错误: 实体{ listItemEntity.EntityName } 不存在{navObjectNameColumnInfo.Navigat.Name}");
|
||||
var navType = navObjectNamePropety.PropertyType;
|
||||
var navEntityInfo = this.Context.EntityMaintenance.GetEntityInfo(navType);
|
||||
this.Context.InitMappingInfo(navEntityInfo.Type);
|
||||
var db = this.Context;
|
||||
db = GetCrossDatabase(db,navType);
|
||||
var navEntityInfo = db.EntityMaintenance.GetEntityInfo(navType);
|
||||
db.InitMappingInfo(navEntityInfo.Type);
|
||||
var navPkColumn = navEntityInfo.Columns.Where(it => it.IsPrimarykey).FirstOrDefault();
|
||||
Check.ExceptionEasy(navPkColumn==null&& navObjectNameColumnInfo.Navigat.Name2==null, navEntityInfo.EntityName+ "need primarykey", navEntityInfo.EntityName + " 需要主键");
|
||||
if (navObjectNameColumnInfo.Navigat.Name2.HasValue())
|
||||
@ -329,7 +338,7 @@ namespace SqlSugar
|
||||
if (list.Any()&&navObjectNamePropety.GetValue(list.First()) == null)
|
||||
{
|
||||
var sqlObj = GetWhereSql(navObjectNameColumnInfo.Navigat.Name);
|
||||
var navList = selector(this.Context.Queryable<object>().Filter(navEntityInfo.Type).AS(navEntityInfo.DbTableName)
|
||||
var navList = selector(db.Queryable<object>().Filter(navEntityInfo.Type).AS(navEntityInfo.DbTableName)
|
||||
.WhereIF(navObjectNameColumnInfo.Navigat.WhereSql.HasValue(), navObjectNameColumnInfo.Navigat.WhereSql)
|
||||
.WhereIF(sqlObj.WhereString.HasValue(),sqlObj.WhereString)
|
||||
.AddParameters(sqlObj.Parameters).Where(conditionalModels));
|
||||
@ -364,7 +373,9 @@ namespace SqlSugar
|
||||
{
|
||||
var navEntity = navObjectNameColumnInfo.PropertyInfo.PropertyType.GetGenericArguments()[0];
|
||||
var navEntityInfo = this.Context.EntityMaintenance.GetEntityInfo(navEntity);
|
||||
this.Context.InitMappingInfo(navEntityInfo.Type);
|
||||
var childDb = this.Context;
|
||||
childDb = GetCrossDatabase(childDb, navEntityInfo.Type);
|
||||
childDb.InitMappingInfo(navEntityInfo.Type);
|
||||
var navColumn = navEntityInfo.Columns.FirstOrDefault(it => it.PropertyName == navObjectNameColumnInfo.Navigat.Name);
|
||||
Check.ExceptionEasy(navColumn == null, $"{navEntityInfo.EntityName} not found {navObjectNameColumnInfo.Navigat.Name} ", $"实体 {navEntityInfo.EntityName} 未找到导航配置列 {navObjectNameColumnInfo.Navigat.Name} ");
|
||||
//var navType = navObjectNamePropety.PropertyType;
|
||||
@ -388,7 +399,7 @@ namespace SqlSugar
|
||||
|
||||
if (list.Any() && navObjectNamePropety.GetValue(list.First()) == null)
|
||||
{
|
||||
var navList = selector(this.Context.Queryable<object>(sqlObj.TableShortName).AS(navEntityInfo.DbTableName).Filter(navEntityInfo.Type).AddParameters(sqlObj.Parameters).Where(conditionalModels).WhereIF(sqlObj.WhereString.HasValue(), sqlObj.WhereString).Select(sqlObj.SelectString).OrderByIF(sqlObj.OrderByString.HasValue(), sqlObj.OrderByString));
|
||||
var navList = selector(childDb.Queryable<object>(sqlObj.TableShortName).AS(navEntityInfo.DbTableName).Filter(navEntityInfo.Type).AddParameters(sqlObj.Parameters).Where(conditionalModels).WhereIF(sqlObj.WhereString.HasValue(), sqlObj.WhereString).Select(sqlObj.SelectString).OrderByIF(sqlObj.OrderByString.HasValue(), sqlObj.OrderByString));
|
||||
if (navList.HasValue())
|
||||
{
|
||||
//var setValue = navList
|
||||
@ -689,6 +700,31 @@ namespace SqlSugar
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private SqlSugarProvider GetCrossDatabase(SqlSugarProvider db, Type type)
|
||||
{
|
||||
if (IsCrossQueryWithAttr == false && this.CrossQueryItems == null)
|
||||
{
|
||||
return db;
|
||||
}
|
||||
else if (IsCrossQueryWithAttr)
|
||||
{
|
||||
var tenant = type.GetCustomAttribute<TenantAttribute>();
|
||||
if (tenant != null)
|
||||
{
|
||||
return db.Root.GetConnection(tenant.configId);
|
||||
}
|
||||
else
|
||||
{
|
||||
return db;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return db;
|
||||
}
|
||||
}
|
||||
|
||||
private static void AppColumns(SqlInfo result, ISugarQueryable<object> queryable, string columnName)
|
||||
{
|
||||
var selectPkName = queryable.SqlBuilder.GetTranslationColumnName(columnName);
|
||||
|
@ -46,6 +46,19 @@ namespace SqlSugar
|
||||
return this.Context.EntityMaintenance.GetEntityInfo<T>();
|
||||
}
|
||||
}
|
||||
public ISugarQueryable<T> CrossQueryWithAttr()
|
||||
{
|
||||
this.QueryBuilder.IsCrossQueryWithAttr = true;
|
||||
return this;
|
||||
}
|
||||
public ISugarQueryable<T> CrossQuery<Type>(string configId)
|
||||
{
|
||||
return this.CrossQuery(typeof(Type),configId);
|
||||
}
|
||||
public ISugarQueryable<T> CrossQuery(Type type, string configId)
|
||||
{
|
||||
return this;
|
||||
}
|
||||
public ISugarQueryable<T> IncludeLeftJoin(Expression<Func<T, object>> LeftObject)
|
||||
{
|
||||
MemberExpression memberExpression;
|
||||
@ -3556,6 +3569,8 @@ namespace SqlSugar
|
||||
asyncQueryableBuilder.IsSqlQuery = this.QueryBuilder.IsSqlQuery;
|
||||
asyncQueryableBuilder.IsSqlQuerySelect = this.QueryBuilder.IsSqlQuerySelect;
|
||||
asyncQueryableBuilder.OldSql = this.QueryBuilder.OldSql;
|
||||
asyncQueryableBuilder.IsCrossQueryWithAttr = this.QueryBuilder.IsCrossQueryWithAttr;
|
||||
asyncQueryableBuilder.CrossQueryItems = this.QueryBuilder.CrossQueryItems;
|
||||
}
|
||||
protected int SetCacheTime(int cacheDurationInSeconds)
|
||||
{
|
||||
|
@ -33,6 +33,8 @@ namespace SqlSugar
|
||||
#endregion
|
||||
|
||||
#region Splicing basic
|
||||
public bool IsCrossQueryWithAttr { get; set; }
|
||||
public Dictionary<string,string> CrossQueryItems { get; set; }
|
||||
public bool IsSelectSingleFiledJson { get; set; }
|
||||
public string TranLock { get; set; }
|
||||
public bool IsDisableMasterSlaveSeparation { get; set; }
|
||||
|
@ -398,7 +398,7 @@ namespace SqlSugar
|
||||
}
|
||||
public IUpdateable<T> SetColumns(Expression<Func<T, object>> filedNameExpression, object fieldValue)
|
||||
{
|
||||
var name= UpdateBuilder.GetExpressionValue(filedNameExpression,ResolveExpressType.FieldSingle).GetString();
|
||||
var name= UpdateBuilder.GetExpressionValue(filedNameExpression,ResolveExpressType.WhereSingle).GetString();
|
||||
name = UpdateBuilder.Builder.GetNoTranslationColumnName(name);
|
||||
return SetColumns(name, fieldValue);
|
||||
}
|
||||
|
@ -19,6 +19,9 @@ namespace SqlSugar
|
||||
ISugarQueryable<T> AS<T2>(string tableName);
|
||||
ISugarQueryable<T> AS(string tableName);
|
||||
ISugarQueryable<T> With(string withString);
|
||||
ISugarQueryable<T> CrossQueryWithAttr();
|
||||
ISugarQueryable<T> CrossQuery<Type>(string configId);
|
||||
ISugarQueryable<T> CrossQuery(Type type ,string configId);
|
||||
ISugarQueryable<T> IncludeLeftJoin(Expression<Func<T, object>> LeftObject);
|
||||
ISugarQueryable<T, T2> LeftJoin<T2>(ISugarQueryable<T2> joinQueryable, Expression<Func<T, T2, bool>> joinExpression);
|
||||
ISugarQueryable<T, T2> InnerJoin<T2>(ISugarQueryable<T2> joinQueryable, Expression<Func<T, T2, bool>> joinExpression);
|
||||
|
@ -795,6 +795,7 @@ namespace SqlSugar
|
||||
{
|
||||
db.Context.Ado.BeginTran();
|
||||
}
|
||||
db.Context.Root = this;
|
||||
return db.Context;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user