Synchronization code

This commit is contained in:
sunkaixuan
2023-01-11 20:54:41 +08:00
parent 565aa8a7b9
commit 6a5feb8490
6 changed files with 29 additions and 1 deletions

View File

@@ -1139,6 +1139,10 @@ namespace SqlSugar
{
if (this.QueryBuilder.AsTables != null && this.QueryBuilder.AsTables.Any(it => it.Key == entityName))
{
if (this.QueryBuilder.JoinQueryInfos.Count(it => it.TableName.EqualCase(tableName)) > 1)
{
Check.ExceptionEasy($"if same entity name ,.LeftJoin(db.Queryable<{entityName}>,(x,y..)=>....).As(\"{tableName}\")",$"存在相同实体,请使用.LeftJoin(db.Queryable<{entityName}>).As(\"{tableName}\",(x,y..)=>...)");
}
Check.Exception(true, ErrorMessage.GetThrowMessage($"use As<{tableName}>(\"{tableName}\")", $"请把 As(\"{tableName}\"), 改成 As<{tableName}实体>(\"{tableName}\")"));
}
else

View File

@@ -695,5 +695,9 @@ namespace SqlSugar
var parameterNameB = model.Args[1].MemberName;
return $"(case when {parameterNameA}>{parameterNameB} then 1 when {parameterNameA}={parameterNameB} then 0 else -1 end)";
}
public virtual string GetTableWithDataBase(string dataBaseName,string tableName)
{
return $"{dataBaseName}.{tableName}";
}
}
}

View File

@@ -103,5 +103,6 @@ namespace SqlSugar
string JsonListObjectAny(MethodCallExpressionModel model);
string JsonArrayAny(MethodCallExpressionModel model);
string CompareTo(MethodCallExpressionModel model);
string GetTableWithDataBase(string databaseName,string tableName);
}
}

View File

@@ -258,6 +258,7 @@ namespace SqlSugar
private void ResolveMemberValue(ExpressionParameter parameter, ExpressionParameter baseParameter, MemberExpression expression, bool? isLeft, bool isSetTempData)
{
var nav = new OneToOneNavgateExpression(this.Context?.SugarContext?.Context);
nav.ExpContext = this.Context;
var navN = new OneToOneNavgateExpressionN(this.Context?.SugarContext?.Context);
if (nav.IsNavgate(expression))
{

View File

@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
@@ -9,6 +10,7 @@ namespace SqlSugar
{
internal class OneToOneNavgateExpression
{
public ExpressionContext ExpContext;
private SqlSugarProvider context;
internal EntityInfo EntityInfo;
internal EntityInfo ProPertyEntity;
@@ -96,8 +98,20 @@ namespace SqlSugar
pk = queryable.QueryBuilder.Builder.GetTranslationColumnName(pk);
name = queryable.QueryBuilder.Builder.GetTranslationColumnName(name);
selectName = queryable.QueryBuilder.Builder.GetTranslationColumnName(selectName);
var tableName = this.ProPertyEntity.DbTableName;
if (ExpContext?.SugarContext?.QueryBuilder?.IsCrossQueryWithAttr==true)
{
var attr= this.ProPertyEntity.Type.GetCustomAttribute<TenantAttribute>();
var configId = ((object)this.context.CurrentConnectionConfig.ConfigId).ObjToString();
if (attr != null&& configId != attr.configId.ObjToString())
{
var dbName = this.context.Root.GetConnection(attr.configId).Ado.Connection.Database;
tableName = queryable.QueryBuilder.LambdaExpressions.DbMehtods.GetTableWithDataBase
(queryable.QueryBuilder.Builder.GetTranslationColumnName(dbName), queryable.QueryBuilder.Builder.GetTranslationColumnName(tableName));
}
}
mapper.Sql = queryable
.AS(this.ProPertyEntity.DbTableName)
.AS(tableName)
.WhereIF(Navigat.WhereSql.HasValue(),Navigat.WhereSql)
.Where($" {ShorName}.{name}={pk} ").Select(selectName).ToSql().Key;
mapper.Sql = $" ({mapper.Sql}) ";

View File

@@ -20,6 +20,10 @@ namespace SqlSugar
}
public partial class SqlServerMethod : DefaultDbMethod, IDbMethods
{
public override string GetTableWithDataBase(string dataBaseName, string tableName)
{
return $"{dataBaseName}.dbo.{tableName}";
}
public override string GetForXmlPath()
{
return " FOR XML PATH('')),1,len(N','),'') ";