Synchronization code

This commit is contained in:
sunkaixuan 2023-08-20 17:18:27 +08:00
parent 627827b8c2
commit 771c3ebe46
3 changed files with 33 additions and 1 deletions

View File

@ -727,11 +727,16 @@ namespace SqlSugar
if (properyName != null)
{
var fkColumnsInfo = entityInfo.Columns.FirstOrDefault(x => x.PropertyName == properyName);
var pkColumnsInfo = entityInfo.Columns.FirstOrDefault(x => x.IsPrimarykey);
if (fkColumnsInfo != null)
{
var fkName = fkColumnsInfo.DbColumnName;
AppColumns(result, queryable, fkName);
}
if (pkColumnsInfo!=null&&fkColumnsInfo == null&&result.SelectString != null && !result.SelectString.Contains(queryable.SqlBuilder.GetTranslationColumnName(pkColumnsInfo.DbColumnName)))
{
AppColumns(result, queryable, pkColumnsInfo.DbColumnName);
}
}
}
}

View File

@ -656,7 +656,12 @@ namespace SqlSugar
}
foreach (var item in navManages)
{
var navName = ExpressionTool.GetMemberName(item.Expressions.First());
var FirstExp = item.Expressions.First();
var navName = ExpressionTool.GetMemberName(FirstExp);
if (FirstExp is LambdaExpression &&ExpressionTool.GetMethodName((FirstExp as LambdaExpression).Body) == "ToList")
{
navName = ExpressionTool.GetFirstTypeNameFromExpression(FirstExp);
}
var navColumn = entityColumns.Where(it => it.IsPrimarykey == false).Where(it => it.Navigat != null).FirstOrDefault(it => it.PropertyName == navName);
if (navColumn != null && navColumn.Navigat.NavigatType != NavigateType.ManyToMany)
{

View File

@ -215,6 +215,28 @@ namespace SqlSugar
return newExp;
}
public static string GetFirstTypeNameFromExpression(Expression expression)
{
if (expression is LambdaExpression lambda)
{
return GetFirstTypeNameFromExpression(lambda.Body);
}
else if (expression is MemberExpression member)
{
return member.Member.Name;
}
else if (expression is NewExpression newExpr)
{
return newExpr.Type.Name;
}
else if (expression is MethodCallExpression methodCall)
{
return GetFirstTypeNameFromExpression(methodCall.Arguments.FirstOrDefault());
}
return "";
}
public static string GetMethodName(Expression expression)
{
if (expression is MethodCallExpression)