Synchronization code

This commit is contained in:
sunkaixuan
2023-03-27 21:30:58 +08:00
parent b376225501
commit b2ddea9bea
12 changed files with 104 additions and 15 deletions

View File

@@ -82,7 +82,7 @@ namespace SqlSugar
var dr = dt.NewRow();
foreach (var column in columns)
{
if (column.IsIgnore || column.IsOnlyIgnoreInsert)
if (column.IsIgnore)
{
continue;
}

View File

@@ -10,6 +10,11 @@ namespace SqlSugar
{
public partial class QueryableProvider<T> : QueryableAccessory, ISugarQueryable<T>
{
public ISugarQueryable<T> IncludesByExpression2<TReturn1, TReturn2>(Expression include1, Expression include2)
{
_Includes<T, TReturn1,TReturn2>(this.Context, include1,include2);
return this;
}
public ISugarQueryable<T> IncludesByExpression<TReturn1>(Expression include1)
{
_Includes<T, TReturn1>(this.Context, include1);
@@ -41,6 +46,38 @@ namespace SqlSugar
}
return this;
}
public ISugarQueryable<T> IncludesAllSecondLayer<TReturn1>(Expression<Func<T, TReturn1>> expression, params string[] ignoreProperyNameList)
{
this.Includes(expression);
var type = typeof(TReturn1);
if (type.FullName.IsCollectionsList())
{
type = type.GetGenericArguments()[0];
}
var navs = this.Context.EntityMaintenance.GetEntityInfo(type).Columns.Where(it => it.Navigat != null).ToList();
foreach (var item in navs)
{
if (ignoreProperyNameList != null && ignoreProperyNameList.Any(z => z.EqualCase(item.PropertyName)))
{
//future
}
else
{
var properyType = item.PropertyInfo.PropertyType;
var properyItemType = properyType;
if (properyType.FullName.IsCollectionsList())
{
properyItemType = properyType.GetGenericArguments()[0];
}
var exp = ExpressionBuilderHelper.CreateExpressionSelectField(type, item.PropertyName, properyType);
var method = this.GetType().GetMethods().Where(it => it.Name == "IncludesByExpression2")
.First()
.MakeGenericMethod(type, properyItemType);
method.Invoke(this, new object[] { expression, exp });
}
}
return this;
}
public ISugarQueryable<T> Includes<TReturn1>(Expression<Func<T, List<TReturn1>>> include1) { _Includes<T, TReturn1>(this.Context, include1); return this; }
public ISugarQueryable<T> Includes<TReturn1>(Expression<Func<T, TReturn1>> include1) { _Includes<T, TReturn1>(this.Context, include1); return this; }
public ISugarQueryable<T> Includes<TReturn1, TReturn2>(Expression<Func<T, TReturn1>> include1, Expression<Func<TReturn1, List<TReturn2>>> include2) { _Includes<T, TReturn1, TReturn2>(this.Context, include1, include2); return this; }

View File

@@ -33,6 +33,7 @@ namespace SqlSugar
public bool IsOffIdentity { get; set; }
public bool IsWhereColumns { get; set; }
public bool? IsListUpdate { get; set; }
public List<string> UpdateColumns { get; set; }
public virtual string SqlTemplate
{

View File

@@ -821,6 +821,10 @@ namespace SqlSugar
{
InitMappingInfo<T>();
DeleteableProvider<T> result = this.CreateDeleteable<T>();
if (this.Context.CurrentConnectionConfig?.MoreSettings?.IsAutoDeleteQueryFilter == true)
{
return result.EnableQueryFilter();
}
return result;
}
public virtual IDeleteable<T> Deleteable<T>(Expression<Func<T, bool>> expression) where T : class, new()
@@ -929,6 +933,10 @@ namespace SqlSugar
{
var result = this.Context.Updateable(new T[] { new T() });
result.UpdateParameterIsNull = true;
if (this.Context.CurrentConnectionConfig?.MoreSettings?.IsAutoUpdateQueryFilter == true)
{
return result.EnableQueryFilter();
}
return result;
}
public virtual IUpdateable<T> Updateable<T>(Expression<Func<T, T>> columns) where T : class, new()

View File

@@ -25,6 +25,7 @@ namespace SqlSugar
{
var addList = item.Select(it => it.Item).ToList();
result += this.Context.Updateable(addList)
.UpdateColumns(updateobj.UpdateBuilder.UpdateColumns?.ToArray())
.IgnoreColumns(this.updateobj.UpdateBuilder.IsNoUpdateNull, this.updateobj.UpdateBuilder.IsOffIdentity,this.updateobj.UpdateBuilder.IsNoUpdateDefaultValue)
.IgnoreColumns(GetIgnoreColumns()).AS(item.Key).ExecuteCommand();
}

View File

@@ -80,6 +80,11 @@ namespace SqlSugar
public virtual int ExecuteCommand()
{
if (this.UpdateBuilder.UpdateColumns.HasValue())
{
var columns = this.UpdateBuilder.UpdateColumns;
this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(it => GetPrimaryKeys().Select(iit => iit.ToLower()).Contains(it.DbColumnName.ToLower()) || columns.Contains(it.PropertyName, StringComparer.OrdinalIgnoreCase)).ToList();
}
if (this.IsTrakingDatas() || IsUpdateNullByList())
{
int trakRows = DatasTrackingExecommand();
@@ -117,6 +122,11 @@ namespace SqlSugar
public virtual async Task<int> ExecuteCommandAsync()
{
if (this.UpdateBuilder.UpdateColumns.HasValue())
{
var columns = this.UpdateBuilder.UpdateColumns;
this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(it => GetPrimaryKeys().Select(iit => iit.ToLower()).Contains(it.DbColumnName.ToLower()) || columns.Contains(it.PropertyName, StringComparer.OrdinalIgnoreCase)).ToList();
}
if (this.IsTrakingDatas()||IsUpdateNullByList())
{
int trakRows =await DatasTrackingExecommandAsync();
@@ -176,6 +186,7 @@ namespace SqlSugar
result.UpdateBuilder.IsNoUpdateDefaultValue = this.UpdateBuilder.IsNoUpdateDefaultValue;
result.UpdateBuilder.IsNoUpdateNull= this.UpdateBuilder.IsNoUpdateNull;
result.UpdateBuilder.SetValues= this.UpdateBuilder.SetValues.ToList();
result.UpdateBuilder.UpdateColumns = this.UpdateBuilder.UpdateColumns.ToList();
result.UpdateBuilder.Context = this.Context;
return result;
}
@@ -395,25 +406,37 @@ namespace SqlSugar
{
ThrowUpdateByExpression();
var updateColumns = UpdateBuilder.GetExpressionValue(columns, ResolveExpressType.ArraySingle).GetResultArray().Select(it => this.SqlBuilder.GetNoTranslationColumnName(it)).ToList();
List<string> primaryKeys = GetPrimaryKeys();
foreach (var item in this.UpdateBuilder.DbColumnInfoList)
if (this.UpdateBuilder.UpdateColumns == null)
{
var mappingInfo = primaryKeys.SingleOrDefault(i => item.DbColumnName.Equals(i, StringComparison.CurrentCultureIgnoreCase));
if (mappingInfo != null && mappingInfo.Any())
{
item.IsPrimarykey = true;
}
this.UpdateBuilder.UpdateColumns = new List<string>();
}
this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(it => updateColumns.Any(uc => uc.Equals(it.PropertyName, StringComparison.CurrentCultureIgnoreCase) || uc.Equals(it.DbColumnName, StringComparison.CurrentCultureIgnoreCase)) || it.IsPrimarykey || it.IsIdentity).ToList();
this.UpdateBuilder.UpdateColumns.AddRange(updateColumns);
//List<string> primaryKeys = GetPrimaryKeys();
//foreach (var item in this.UpdateBuilder.DbColumnInfoList)
//{
// var mappingInfo = primaryKeys.SingleOrDefault(i => item.DbColumnName.Equals(i, StringComparison.CurrentCultureIgnoreCase));
// if (mappingInfo != null && mappingInfo.Any())
// {
// item.IsPrimarykey = true;
// }
//}
//this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(it => updateColumns.Any(uc => uc.Equals(it.PropertyName, StringComparison.CurrentCultureIgnoreCase) || uc.Equals(it.DbColumnName, StringComparison.CurrentCultureIgnoreCase)) || it.IsPrimarykey || it.IsIdentity).ToList();
return this;
}
public IUpdateable<T> UpdateColumns(string[] columns)
{
if (columns.HasValue())
if (columns == null||columns.Length==0) return this;
ThrowUpdateByExpression();
if (this.UpdateBuilder.UpdateColumns == null)
{
ThrowUpdateByExpression();
this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(it => GetPrimaryKeys().Select(iit => iit.ToLower()).Contains(it.DbColumnName.ToLower()) || columns.Contains(it.PropertyName, StringComparer.OrdinalIgnoreCase)).ToList();
this.UpdateBuilder.UpdateColumns = new List<string>();
}
this.UpdateBuilder.UpdateColumns.AddRange(columns);
//if (columns.HasValue())
//{
// //this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(it => GetPrimaryKeys().Select(iit => iit.ToLower()).Contains(it.DbColumnName.ToLower()) || columns.Contains(it.PropertyName, StringComparer.OrdinalIgnoreCase)).ToList();
//}
return this;
}
public IUpdateable<T> UpdateColumnsIF(bool isUpdateColumns, Expression<Func<T, object>> columns)

View File

@@ -20,5 +20,7 @@ namespace SqlSugar
public DateTime? DbMinDate { get; set; } = Convert.ToDateTime("1900-01-01");
public bool IsNoReadXmlDescription { get; set; }
public bool SqlServerCodeFirstNvarchar { get; set; }
public bool IsAutoUpdateQueryFilter { get; set; }
public bool IsAutoDeleteQueryFilter { get; set; }
}
}

View File

@@ -246,6 +246,12 @@ namespace SqlSugar
return string.Format(" {0} {1} {2} ", GetTranslationColumnName(fieldValue), "AS", GetTranslationColumnName(asName));
}
public virtual string GetAsString2(string asName, string fieldValue)
{
if (fieldValue.Contains(".*") || fieldValue == "*") return fieldValue;
return string.Format(" {0} {1} {2} ",fieldValue, "AS", GetTranslationColumnName(asName));
}
public virtual string GetEqString(string eqName, string fieldValue)
{
return string.Format(" {0} {1} {2} ", GetTranslationColumnName(eqName), "=", GetTranslationColumnName(fieldValue));

View File

@@ -15,7 +15,14 @@ namespace SqlSugar
{
this.Expression = item;
this.Start();
parameter.Context.Result.Append(this.Context.GetAsString(asName, parameter.CommonTempData.ObjToString()));
if (ExpressionTool.GetMethodName(item) == "MappingColumn")
{
parameter.Context.Result.Append(this.Context.GetAsString2(asName, parameter.CommonTempData.ObjToString()));
}
else
{
parameter.Context.Result.Append(this.Context.GetAsString(asName, parameter.CommonTempData.ObjToString()));
}
}
private void ResloveCountAny(ExpressionParameter parameter, Expression item, string asName)

View File

@@ -14,8 +14,10 @@ namespace SqlSugar
public partial interface ISugarQueryable<T>
{
NavISugarQueryable<T> AsNavQueryable();
ISugarQueryable<T> IncludesByExpression2<TReturn1, TReturn2>(Expression include1, Expression include2);
ISugarQueryable<T> IncludesByExpression<TReturn1>(Expression include1);
ISugarQueryable<T> IncludesAllFirstLayer(params string[] ignoreProperyNameList);
ISugarQueryable<T> IncludesAllSecondLayer<TReturn1>(Expression<Func<T, TReturn1>> expression,params string[] ignoreProperyNameList);
ISugarQueryable<T> Includes<TReturn1>(Expression<Func<T, List<TReturn1>>> include1);
ISugarQueryable<T> Includes<TReturn1>(Expression<Func<T, TReturn1>> include1);
ISugarQueryable<T> Includes<TReturn1, TReturn2>(Expression<Func<T, List<TReturn1>>> include1, Expression<Func<TReturn1, List<TReturn2>>> include2);

View File

@@ -16,7 +16,7 @@ namespace SqlSugar
{
public override string GetStringJoinSelector(string result, string separator)
{
return $"group_concat({result},'{separator},') ";
return $"group_concat({result},'{separator}') ";
}
public override string DateDiff(MethodCallExpressionModel model)
{

View File

@@ -198,7 +198,9 @@ namespace SqlSugar
DbMinDate=it.MoreSettings.DbMinDate,
IsNoReadXmlDescription=it.MoreSettings.IsNoReadXmlDescription,
SqlServerCodeFirstNvarchar=it.MoreSettings.SqlServerCodeFirstNvarchar,
IsAutoToUpper=it.MoreSettings.IsAutoToUpper
IsAutoToUpper=it.MoreSettings.IsAutoToUpper,
IsAutoDeleteQueryFilter=it.MoreSettings.IsAutoDeleteQueryFilter,
IsAutoUpdateQueryFilter = it.MoreSettings.IsAutoUpdateQueryFilter,
},
SqlMiddle = it.SqlMiddle == null ? null : new SqlMiddle