Synchronization code

This commit is contained in:
sunkaixuan
2023-01-12 20:52:34 +08:00
parent 39b45ec352
commit a56810f791
13 changed files with 136 additions and 14 deletions

View File

@@ -30,14 +30,21 @@ namespace SqlSugar
if (dataReader == null) return result;
while (dataReader.Read())
{
result.Add(entytyList.Build(dataReader));
try
{
result.Add(entytyList.Build(dataReader));
}
catch (Exception ex)
{
Check.Exception(true, ErrorMessage.EntityMappingError, ex.Message);
}
SetAppendColumns(dataReader);
}
ExecuteDataAfterFun(context, dataAfterFunc, result);
}
catch (Exception ex)
catch
{
Check.Exception(true, ErrorMessage.EntityMappingError, ex.Message);
throw;
}
return result;
}
@@ -60,14 +67,21 @@ namespace SqlSugar
if (dataReader == null) return result;
while (await((DbDataReader)dataReader).ReadAsync())
{
result.Add(entytyList.Build(dataReader));
try
{
result.Add(entytyList.Build(dataReader));
}
catch (Exception ex)
{
Check.Exception(true, ErrorMessage.EntityMappingError, ex.Message);
}
SetAppendColumns(dataReader);
}
ExecuteDataAfterFun(context, dataAfterFunc, result);
}
catch (Exception ex)
catch
{
Check.Exception(true, ErrorMessage.EntityMappingError, ex.Message);
throw;
}
return result;
}

View File

@@ -209,6 +209,7 @@ namespace SqlSugar
else if (expResult.IsNavicate)
{
whereString = whereString.Replace(expression.Parameters.First().Name + ".", this.SqlBuilder.GetTranslationTableName(this.EntityInfo.DbTableName) + ".");
whereString = whereString.Replace(this.SqlBuilder.GetTranslationColumnName(expression.Parameters.First().Name) + ".", this.SqlBuilder.GetTranslationTableName(this.EntityInfo.DbTableName) + ".");
}
DeleteBuilder.WhereInfos.Add(whereString);
return this;

View File

@@ -0,0 +1,68 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
namespace SqlSugar
{
public static class EntityColumnExtension
{
public static EntityColumnable<T> IfTable<T>(this EntityColumnInfo entityColumnInfo)
{
EntityColumnable<T> result = new EntityColumnable<T>();
result.entityColumnInfo = entityColumnInfo;
result.IsTable = entityColumnInfo.EntityName == typeof(T).Name;
return result;
}
}
public class EntityColumnable<T>
{
public EntityColumnInfo entityColumnInfo { get; set; }
public bool IsTable { get; set; }
public EntityColumnable<T> UpdateProperty(Expression<Func<T,object>> propertyExpression,Action<EntityColumnInfo> updateAction)
{
var name = ExpressionTool.GetMemberName(propertyExpression);
if (entityColumnInfo.PropertyName == name && IsTable)
{
updateAction(entityColumnInfo);
}
return this;
}
public EntityColumnable<T> OneToOne(Expression<Func<T, object>> propertyExpression,string firstName, string lastName=null)
{
var name = ExpressionTool.GetMemberName(propertyExpression);
if (entityColumnInfo.PropertyName == name && IsTable)
{
entityColumnInfo.Navigat = new Navigate(NavigateType.OneToOne, firstName, lastName);
entityColumnInfo.IsIgnore = true;
}
return this;
}
public EntityColumnable<T> OneToMany(Expression<Func<T, object>> propertyExpression, string firstName, string lastName)
{
var name = ExpressionTool.GetMemberName(propertyExpression);
if (entityColumnInfo.PropertyName == name && IsTable)
{
entityColumnInfo.Navigat = new Navigate(NavigateType.OneToMany, firstName, lastName);
entityColumnInfo.IsIgnore = true;
}
return this;
}
public EntityColumnable<T> ManyToMany(Expression<Func<T, object>> propertyExpression,Type mapppingType, string mapppingTypeAid, string mapppingTypeBid)
{
var name = ExpressionTool.GetMemberName(propertyExpression);
if (entityColumnInfo.PropertyName == name && IsTable)
{
entityColumnInfo.Navigat = new Navigate(mapppingType, mapppingTypeAid, mapppingTypeBid);
entityColumnInfo.IsIgnore = true;
}
return this;
}
}
}

View File

@@ -337,7 +337,7 @@ namespace SqlSugar
ConditionalType = ConditionalType.In,
FieldName = navPkColumn.DbColumnName,
FieldValue = String.Join(",", ids),
CSharpTypeName = navObjectNameColumnInfo.PropertyInfo.PropertyType.Name
CSharpTypeName = navPkColumn.PropertyInfo.PropertyType.Name
}));
if (list.Any()&&navObjectNamePropety.GetValue(list.First()) == null)
{

View File

@@ -817,7 +817,7 @@ namespace SqlSugar
}
if (this.TableShortName.HasValue()&&!IsSqlQuery)
{
result += (TableShortName + UtilConstants.Space);
result += (Builder.GetTranslationColumnName(TableShortName) + UtilConstants.Space);
}
if (this.TableWithString.HasValue() && this.TableWithString != SqlWith.Null)
{

View File

@@ -382,6 +382,26 @@ namespace SqlSugar
#endregion
#region Update by expression
public IUpdateable<T> EnableQueryFilter()
{
try
{
ThrowUpdateByObject();
}
catch
{
Check.ExceptionEasy("Updateable<T>(obj) no support, use Updateable<T>().SetColumn ", "更新过滤器只能用在表达式方式更新 ,更新分为实体更新和表达式更新 。正确用法 Updateable<T>().SetColum(..).Where(..)");
}
var queryable = this.Context.Queryable<T>();
queryable.QueryBuilder.LambdaExpressions.ParameterIndex = 1000;
var sqlable = queryable.ToSql();
var whereInfos = Regex.Split(sqlable.Key, " Where ", RegexOptions.IgnoreCase);
if (whereInfos.Length > 1)
{
this.Where(whereInfos.Last(), sqlable.Value);
}
return this;
}
public IUpdateable<T> SetColumns(string fieldName, object fieldValue)
{
ThrowUpdateByObject();
@@ -572,6 +592,7 @@ namespace SqlSugar
else if (expResult.IsNavicate)
{
whereString = whereString.Replace(expression.Parameters.First().Name + ".", this.SqlBuilder.GetTranslationTableName(this.EntityInfo.DbTableName) + ".");
whereString = whereString.Replace(this.SqlBuilder.GetTranslationColumnName(expression.Parameters.First().Name) + ".", this.SqlBuilder.GetTranslationTableName(this.EntityInfo.DbTableName) + ".");
}
UpdateBuilder.WhereValues.Add(whereString);
return this;

View File

@@ -15,7 +15,6 @@ namespace SqlSugar
Dm,
Kdbndp,
Oscar,
[Obsolete("使用DbType.MySql已经全部统一用MySqlConnector取代 MySql.Data 原因.NET7下面差了几倍性能")]
MySqlConnector,
Access,
OpenGauss,

View File

@@ -186,6 +186,10 @@ namespace SqlSugar
{
this.whereSql = this.whereSql.Replace($" {PropertyShortName}.", $" {this.ProPertyEntity.DbTableName}_1.");
}
else if (this.whereSql.Contains($" {queryable.QueryBuilder.Builder.GetTranslationColumnName(PropertyShortName)}."))
{
this.whereSql = this.whereSql.Replace($" {queryable.QueryBuilder.Builder.GetTranslationColumnName(PropertyShortName)}.", $" {this.ProPertyEntity.DbTableName}_1.");
}
mapper.Sql = mapper.Sql + " AND " + this.whereSql+")";
}
if (MethodName == "Any")

View File

@@ -113,7 +113,7 @@ namespace SqlSugar
mapper.Sql = queryable
.AS(tableName)
.WhereIF(Navigat.WhereSql.HasValue(),Navigat.WhereSql)
.Where($" {ShorName}.{name}={pk} ").Select(selectName).ToSql().Key;
.Where($" {queryable.SqlBuilder.GetTranslationColumnName(ShorName)}.{name}={pk} ").Select(selectName).ToSql().Key;
mapper.Sql = $" ({mapper.Sql}) ";
return mapper;
}

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;
@@ -14,6 +15,7 @@ namespace SqlSugar
public EntityInfo entityInfo;
public List<ExpressionItems> items;
public SqlSugarProvider context;
public ISqlBuilder builder;
public OneToOneNavgateExpressionN(SqlSugarProvider context)
{
this.context = context;
@@ -49,6 +51,7 @@ namespace SqlSugar
var i = 0;
var masterShortName = formInfo.ThisEntityInfo.DbTableName + i;
var queryable = this.context.Queryable<object>(ToShortName(masterShortName)).AS(formInfo.ThisEntityInfo.DbTableName).Filter(null,true);
builder = queryable.SqlBuilder;
i++;
var lastShortName = "";
foreach (var item in joinInfos)
@@ -143,14 +146,17 @@ namespace SqlSugar
#region Helper
private string ToShortName(string name)
{
var result = "";
if (name.ObjToString().Contains("."))
{
return name.Replace(".", "_");
result= name.Replace(".", "_");
}
else
{
return name;
result= name;
}
if (builder == null) return name;
return builder.GetTranslationColumnName(name);
}
private static bool IsParameter(Expression child2Expression)

View File

@@ -85,7 +85,11 @@ namespace SqlSugar
}
var selfParameterName = this.Context.GetTranslationColumnName((argExp as LambdaExpression).Parameters.First().Name) + UtilConstants.Dot;
if (this.Context.JoinIndex == 0)
if (this.Context.JoinIndex == 0 && result.Contains(" FROM "))
{
this.Context.CurrentShortName = selfParameterName;
}
else if (this.Context.JoinIndex == 0)
result = result.Replace(selfParameterName, SubTools.GetSubReplace(this.Context));
return result;
}

View File

@@ -87,7 +87,11 @@ namespace SqlSugar
}
var selfParameterName = Context.GetTranslationColumnName((argExp as LambdaExpression).Parameters.First().Name) + UtilConstants.Dot;
if (this.Context.JoinIndex == 0)
if (this.Context.JoinIndex == 0&&result.Contains(" FROM "))
{
this.Context.CurrentShortName= selfParameterName;
}
else if (this.Context.JoinIndex == 0)
result = result.Replace(selfParameterName, SubTools.GetSubReplace(this.Context));
if (!string.IsNullOrEmpty(selfParameterName) && this.Context.IsSingle&& this.Context.JoinIndex == 0)
{

View File

@@ -103,5 +103,6 @@ namespace SqlSugar
void AddQueue();
SplitTableUpdateProvider<T> SplitTable(Func<List<SplitTableInfo>, IEnumerable<SplitTableInfo>> getTableNamesFunc);
SplitTableUpdateByObjectProvider<T> SplitTable();
IUpdateable<T> EnableQueryFilter();
}
}