mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-10-27 03:09:34 +08:00
Synchronization code
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -15,7 +15,6 @@ namespace SqlSugar
|
||||
Dm,
|
||||
Kdbndp,
|
||||
Oscar,
|
||||
[Obsolete("使用DbType.MySql,已经全部统一用MySqlConnector取代 MySql.Data 原因.NET7下面差了几倍性能")]
|
||||
MySqlConnector,
|
||||
Access,
|
||||
OpenGauss,
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -103,5 +103,6 @@ namespace SqlSugar
|
||||
void AddQueue();
|
||||
SplitTableUpdateProvider<T> SplitTable(Func<List<SplitTableInfo>, IEnumerable<SplitTableInfo>> getTableNamesFunc);
|
||||
SplitTableUpdateByObjectProvider<T> SplitTable();
|
||||
IUpdateable<T> EnableQueryFilter();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user