mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-08-23 22:11:36 +08:00
Supporting multiple setColumns
This commit is contained in:
parent
9ac7f1b2bc
commit
5a0f2f6546
@ -76,6 +76,23 @@ namespace OrmTest
|
||||
}).Where(it => it.id == 1).ToSql();
|
||||
UValidate.Check(sql.Key, @"UPDATE [NullTest] SET
|
||||
[p2] = @Const0 WHERE ( [id] = @id1 )", "Updateable");
|
||||
|
||||
|
||||
Db.Updateable<Order>()
|
||||
.SetColumns(it => it.Name == "a")
|
||||
.SetColumns(it => it.CreateTime == DateTime.Now)
|
||||
.SetColumns(it=>it.Price==1).Where(it=>it.Id==1).ExecuteCommand();
|
||||
|
||||
|
||||
Db.Updateable<Order>()
|
||||
.SetColumns(it =>new Order{ Name="a",CreateTime=DateTime.Now })
|
||||
.SetColumns(it => it.Price==1).Where(it => it.Id == 1).ExecuteCommand();
|
||||
|
||||
|
||||
|
||||
Db.Updateable<Order>()
|
||||
.SetColumns(it => new Order { Name = "a", CreateTime = DateTime.Now })
|
||||
.SetColumns(it => new Order() { Price=1 }).Where(it => it.Id == 1).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
public class NullTest
|
||||
|
@ -33,6 +33,7 @@ namespace SqlSugar
|
||||
public bool IsEnableDiffLogEvent { get; set; }
|
||||
public DiffLogModel diffModel { get; set; }
|
||||
private Action RemoveCacheFunc { get; set; }
|
||||
private int SetColumnsIndex { get; set; }
|
||||
#endregion
|
||||
|
||||
#region Core
|
||||
@ -230,6 +231,7 @@ namespace SqlSugar
|
||||
}
|
||||
this.UpdateBuilder.DbColumnInfoList = UpdateBuilder.DbColumnInfoList.Where(it => (UpdateParameterIsNull==false&&IsPrimaryKey(it)) || UpdateBuilder.SetValues.Any(v => SqlBuilder.GetNoTranslationColumnName(v.Key).Equals(it.DbColumnName, StringComparison.CurrentCultureIgnoreCase) || SqlBuilder.GetNoTranslationColumnName(v.Key).Equals(it.PropertyName, StringComparison.CurrentCultureIgnoreCase)) || it.IsPrimarykey == true).ToList();
|
||||
CheckTranscodeing();
|
||||
AppendSets();
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -244,10 +246,10 @@ namespace SqlSugar
|
||||
string key = SqlBuilder.GetNoTranslationColumnName(expResult);
|
||||
UpdateBuilder.SetValues.Add(new KeyValuePair<string, string>(SqlBuilder.GetTranslationColumnName(key), expResult));
|
||||
this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(it => (UpdateParameterIsNull == false && IsPrimaryKey(it)) || UpdateBuilder.SetValues.Any(v => SqlBuilder.GetNoTranslationColumnName(v.Key).Equals(it.DbColumnName, StringComparison.CurrentCultureIgnoreCase) || SqlBuilder.GetNoTranslationColumnName(v.Key).Equals(it.PropertyName, StringComparison.CurrentCultureIgnoreCase)) || it.IsPrimarykey == true).ToList();
|
||||
AppendSets();
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
public IUpdateable<T> UpdateColumnsIF(bool isUpdateColumns, Expression<Func<T, object>> columns)
|
||||
{
|
||||
if (isUpdateColumns)
|
||||
@ -372,6 +374,17 @@ namespace SqlSugar
|
||||
#endregion
|
||||
|
||||
#region Helper
|
||||
private void AppendSets()
|
||||
{
|
||||
if (SetColumnsIndex > 0)
|
||||
{
|
||||
var keys = UpdateBuilder.SetValues.Select(it => SqlBuilder.GetNoTranslationColumnName(it.Key.ToLower())).ToList();
|
||||
var addKeys = keys.Where(k => !this.UpdateBuilder.DbColumnInfoList.Any(it => it.PropertyName.ToLower() == k || it.DbColumnName.ToLower() == k)).ToList();
|
||||
var addItems = this.EntityInfo.Columns.Where(it =>!GetPrimaryKeys().Any(p=>p.ToLower()==it.PropertyName?.ToLower()|| p.ToLower() == it.DbColumnName?.ToLower()) && addKeys.Any(k => it.PropertyName?.ToLower() == k || it.DbColumnName?.ToLower() == k)).ToList();
|
||||
this.UpdateBuilder.DbColumnInfoList.AddRange(addItems.Select(it => new DbColumnInfo() { PropertyName = it.PropertyName, DbColumnName = it.DbColumnName }));
|
||||
}
|
||||
SetColumnsIndex++;
|
||||
}
|
||||
private string _ExecuteCommand()
|
||||
{
|
||||
PreToSql();
|
||||
|
Loading…
Reference in New Issue
Block a user