mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-10-15 18:55:07 +08:00
Synchronization code
This commit is contained in:
@@ -82,7 +82,7 @@ namespace SqlSugar
|
||||
var dr = dt.NewRow();
|
||||
foreach (var column in columns)
|
||||
{
|
||||
if (column.IsIgnore || column.IsOnlyIgnoreInsert)
|
||||
if (column.IsIgnore)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
@@ -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; }
|
||||
|
@@ -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
|
||||
{
|
||||
|
@@ -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()
|
||||
|
@@ -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();
|
||||
}
|
||||
|
@@ -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)
|
||||
|
@@ -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; }
|
||||
}
|
||||
}
|
||||
|
@@ -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));
|
||||
|
@@ -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)
|
||||
|
@@ -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);
|
||||
|
@@ -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)
|
||||
{
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user