Synchronization code

This commit is contained in:
sunkaixuan 2024-03-10 21:12:20 +08:00
parent bb45c25093
commit c71a87b637
4 changed files with 36 additions and 6 deletions

View File

@ -17,5 +17,6 @@ namespace SqlSugar
public List<SugarParameter> Parameters { get; set; }
public List<MappingFieldsExpression> MappingExpressions { get; set; }
public string TableShortName { get; set; }
public Func<List<SplitTableInfo>, IEnumerable<SplitTableInfo>> SplitTable { get; set; }
}
}

View File

@ -372,7 +372,7 @@ namespace SqlSugar
.Select(it => GetOneToOneSelectByColumnInfo(it,db)).ToList();
sqlObj.SelectString = String.Join(",", columns);
}
var navList = selector(db.Queryable<object>().ClearFilter(QueryBuilder.RemoveFilters).Filter((navPkColumn.IsPrimarykey&& navPkCount==1) ? null : this.QueryBuilder?.IsDisabledGobalFilter == true ? null : navEntityInfo.Type).AS(GetDbTableName(navEntityInfo))
var navList = selector(db.Queryable<object>().ClearFilter(QueryBuilder.RemoveFilters).Filter((navPkColumn.IsPrimarykey&& navPkCount==1) ? null : this.QueryBuilder?.IsDisabledGobalFilter == true ? null : navEntityInfo.Type).AS(GetDbTableName(navEntityInfo,sqlObj))
.WhereIF(navObjectNameColumnInfo.Navigat.WhereSql.HasValue(), navObjectNameColumnInfo.Navigat.WhereSql)
.WhereIF(sqlObj.WhereString.HasValue(), sqlObj.WhereString)
.AddParameters(sqlObj.Parameters).Where(conditionalModels)
@ -450,7 +450,7 @@ namespace SqlSugar
.Select(it => GetOneToManySelectByColumnInfo(it,childDb)).ToList();
sqlObj.SelectString = String.Join(",", columns);
}
var navList = selector(childDb.Queryable<object>(sqlObj.TableShortName).AS(GetDbTableName(navEntityInfo)).ClearFilter(QueryBuilder.RemoveFilters).Filter(this.QueryBuilder?.IsDisabledGobalFilter == true ? null : navEntityInfo.Type).AddParameters(sqlObj.Parameters).Where(conditionalModels).WhereIF(sqlObj.WhereString.HasValue(), sqlObj.WhereString).WhereIF(navObjectNameColumnInfo?.Navigat?.WhereSql!=null, navObjectNameColumnInfo?.Navigat?.WhereSql).Select(sqlObj.SelectString).OrderByIF(sqlObj.OrderByString.HasValue(), sqlObj.OrderByString));
var navList = selector(childDb.Queryable<object>(sqlObj.TableShortName).AS(GetDbTableName(navEntityInfo, sqlObj)).ClearFilter(QueryBuilder.RemoveFilters).Filter(this.QueryBuilder?.IsDisabledGobalFilter == true ? null : navEntityInfo.Type).AddParameters(sqlObj.Parameters).Where(conditionalModels).WhereIF(sqlObj.WhereString.HasValue(), sqlObj.WhereString).WhereIF(navObjectNameColumnInfo?.Navigat?.WhereSql!=null, navObjectNameColumnInfo?.Navigat?.WhereSql).Select(sqlObj.SelectString).OrderByIF(sqlObj.OrderByString.HasValue(), sqlObj.OrderByString));
if (navList.HasValue())
{
//var setValue = navList
@ -550,7 +550,7 @@ namespace SqlSugar
helper.NavEntity = navEntityInfo;
helper.RootEntity = childDb.EntityMaintenance.GetEntityInfo<T>();
var whereSql = helper.GetMppingSql(list, sqlObj.MappingExpressions);
var navList = selector(childDb.Queryable<object>().AS(GetDbTableName(navEntityInfo)).AddParameters(sqlObj.Parameters).Where(whereSql,true).WhereIF(sqlObj.WhereString.HasValue(), sqlObj.WhereString).Select(sqlObj.SelectString).OrderByIF(sqlObj.OrderByString.HasValue(), sqlObj.OrderByString));
var navList = selector(childDb.Queryable<object>().AS(GetDbTableName(navEntityInfo, sqlObj)).AddParameters(sqlObj.Parameters).Where(whereSql,true).WhereIF(sqlObj.WhereString.HasValue(), sqlObj.WhereString).Select(sqlObj.SelectString).OrderByIF(sqlObj.OrderByString.HasValue(), sqlObj.OrderByString));
if (navList.HasValue())
{
foreach (var item in list)
@ -586,7 +586,7 @@ namespace SqlSugar
helper.NavEntity = navEntityInfo;
helper.RootEntity = this.Context.EntityMaintenance.GetEntityInfo<T>();
var whereSql = helper.GetMppingSql(list, sqlObj.MappingExpressions);
var navList = selector(childDb.Queryable<object>().AS(GetDbTableName(navEntityInfo)).AddParameters(sqlObj.Parameters).Where(whereSql, true).WhereIF(sqlObj.WhereString.HasValue(), sqlObj.WhereString).Select(sqlObj.SelectString).OrderByIF(sqlObj.OrderByString.HasValue(), sqlObj.OrderByString));
var navList = selector(childDb.Queryable<object>().AS(GetDbTableName(navEntityInfo, sqlObj)).AddParameters(sqlObj.Parameters).Where(whereSql, true).WhereIF(sqlObj.WhereString.HasValue(), sqlObj.WhereString).Select(sqlObj.SelectString).OrderByIF(sqlObj.OrderByString.HasValue(), sqlObj.OrderByString));
if (navList.HasValue())
{
foreach (var item in list)
@ -707,6 +707,11 @@ namespace SqlSugar
}
isList = true;
}
else if (method.Method.Name == "SplitTable")
{
var exp =(Expression<Func<List<SplitTableInfo>, IEnumerable<SplitTableInfo>>>) (item as MethodCallExpression).Arguments[1];
result.SplitTable = exp.Compile();
}
else
{
Check.ExceptionEasy($"no support {item}", $"不支持表达式{item} 不支持方法{method.Method.Name}");
@ -877,9 +882,13 @@ namespace SqlSugar
}
private string GetDbTableName(EntityInfo navEntityInfo)
private string GetDbTableName(EntityInfo navEntityInfo,SqlInfo sqlInfo)
{
if (navEntityInfo.Type.GetCustomAttribute<SplitTableAttribute>() != null)
if (navEntityInfo.Type.GetCustomAttribute<SplitTableAttribute>() != null&&sqlInfo.SplitTable!=null)
{
return "(" + this.Context.QueryableByObject(navEntityInfo.Type).SplitTable(sqlInfo.SplitTable).ToSqlString() + ") split_table";
}
else if (navEntityInfo.Type.GetCustomAttribute<SplitTableAttribute>() != null)
{
return "("+this.Context.QueryableByObject(navEntityInfo.Type).SplitTable().ToSqlString()+") split_table";
}

View File

@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SqlSugar.SplitTableExtensions
{
public static class Extensions
{
public static List<T> SplitTable<T>(this List<T> thisValue,Func<List<SplitTableInfo>, IEnumerable<SplitTableInfo>> getTableNamesFunc)
{
return thisValue;
}
public static List<T> SplitTable<T>(this T thisValue, Func<List<SplitTableInfo>, IEnumerable<SplitTableInfo>> getTableNamesFunc)
{
return new List<T>();
}
}
}

View File

@ -299,6 +299,7 @@
<Compile Include="Realization\QuestDB\SqlBuilder\QuestDBInsertBuilder.cs" />
<Compile Include="Realization\QuestDB\SqlBuilder\QuestDBQueryBuilder.cs" />
<Compile Include="Realization\QuestDB\SqlBuilder\QuestDBUpdateBuilder.cs" />
<Compile Include="SpliteTable\SplitTableExtensions.cs" />
<Compile Include="SugarUnitOfWork.cs" />
<Compile Include="Entities\SugarAbMapping.cs" />
<Compile Include="Entities\JoinMapper.cs" />