diff --git a/Examples/base_entity/BaseEntity.cs b/Examples/base_entity/BaseEntity.cs index e6763f88..54201ec4 100644 --- a/Examples/base_entity/BaseEntity.cs +++ b/Examples/base_entity/BaseEntity.cs @@ -48,7 +48,6 @@ public abstract class BaseEntity { var uow = Orm.CreateUnitOfWork(); uow.IsolationLevel = level; - UnitOfWork.Current.Value = uow; return uow; } } diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs index 31210d4f..1a384f60 100644 --- a/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs +++ b/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs @@ -404,7 +404,7 @@ namespace FreeSql.Tests var tbid = g.sqlite.Select().First()?.Id ?? Guid.Empty; var testarray = new[] { 1, 2, 3 }; - var tbidsql = g.sqlite.Update().Where(a => a.Id == tbid) + var tbidsql1 = g.sqlite.Update().Where(a => a.Id == tbid) .Set(a => new TaskBuild { FileName = "111", @@ -412,6 +412,14 @@ namespace FreeSql.Tests OptionsEntity02 = false, OptionsEntity04 = testarray[0] }).ToSql(); + var tbidsql2 = g.sqlite.Update().Where(a => a.Id == tbid) + .Set(a => new + { + FileName = "111", + TaskName = a.TaskName + "333", + OptionsEntity02 = false, + OptionsEntity04 = testarray[0] + }).ToSql(); var dkdkdkd = g.oracle.Select().ToList(); diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index b7748311..e03bc565 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -1568,7 +1568,7 @@ 设置列的的新值为基础上增加,格式:Set(a => a.Clicks + 1) 相当于 clicks=clicks+1 - 指定更新,格式:Set(a => new { Clicks = a.Clicks + 1, Time = DateTime.Now }) 相当于 set clicks=clicks+1,time='2019-06-19....' + 指定更新,格式:Set(a => new T { Clicks = a.Clicks + 1, Time = DateTime.Now }) 相当于 set clicks=clicks+1,time='2019-06-19....' diff --git a/FreeSql/Interface/Curd/IUpdate.cs b/FreeSql/Interface/Curd/IUpdate.cs index 6e546d4d..26f11dd8 100644 --- a/FreeSql/Interface/Curd/IUpdate.cs +++ b/FreeSql/Interface/Curd/IUpdate.cs @@ -77,7 +77,7 @@ namespace FreeSql /// /// 设置列的的新值为基础上增加,格式:Set(a => a.Clicks + 1) 相当于 clicks=clicks+1 /// - /// 指定更新,格式:Set(a => new { Clicks = a.Clicks + 1, Time = DateTime.Now }) 相当于 set clicks=clicks+1,time='2019-06-19....' + /// 指定更新,格式:Set(a => new T { Clicks = a.Clicks + 1, Time = DateTime.Now }) 相当于 set clicks=clicks+1,time='2019-06-19....' /// /// /// diff --git a/FreeSql/Internal/CommonProvider/UpdateProvider.cs b/FreeSql/Internal/CommonProvider/UpdateProvider.cs index 80da28c1..fa470488 100644 --- a/FreeSql/Internal/CommonProvider/UpdateProvider.cs +++ b/FreeSql/Internal/CommonProvider/UpdateProvider.cs @@ -435,29 +435,41 @@ namespace FreeSql.Internal.CommonProvider { var body = exp?.Body; var nodeType = body?.NodeType; - if (nodeType == ExpressionType.Equal) + switch (nodeType) { - _set.Append(", ").Append(_commonExpression.ExpressionWhereLambdaNoneForeignObject(null, _table, null, exp, null)); - return this; - } - - if (nodeType == ExpressionType.MemberInit) - { - var initExp = body as MemberInitExpression; - if (initExp.Bindings?.Count > 0) - { - for (var a = 0; a < initExp.Bindings.Count; a++) + case ExpressionType.Equal: + _set.Append(", ").Append(_commonExpression.ExpressionWhereLambdaNoneForeignObject(null, _table, null, exp, null)); + return this; + case ExpressionType.MemberInit: + var initExp = body as MemberInitExpression; + if (initExp.Bindings?.Count > 0) { - var initAssignExp = (initExp.Bindings[a] as MemberAssignment); - if (initAssignExp == null) continue; - var memberName = initExp.Bindings[a].Member.Name; - if (_table.ColumnsByCsIgnore.ContainsKey(memberName)) continue; - if (_table.ColumnsByCs.TryGetValue(memberName, out var col) == false) throw new Exception($"找不到属性:{memberName}"); - var memberValue = _commonExpression.ExpressionLambdaToSql(initAssignExp.Expression, new CommonExpression.ExpTSC { }); - _setIncr.Append(", ").Append(_commonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = ").Append(memberValue); + for (var a = 0; a < initExp.Bindings.Count; a++) + { + var initAssignExp = (initExp.Bindings[a] as MemberAssignment); + if (initAssignExp == null) continue; + var memberName = initExp.Bindings[a].Member.Name; + if (_table.ColumnsByCsIgnore.ContainsKey(memberName)) continue; + if (_table.ColumnsByCs.TryGetValue(memberName, out var col) == false) throw new Exception($"找不到属性:{memberName}"); + var memberValue = _commonExpression.ExpressionLambdaToSql(initAssignExp.Expression, new CommonExpression.ExpTSC { }); + _setIncr.Append(", ").Append(_commonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = ").Append(memberValue); + } } - } - return this; + return this; + case ExpressionType.New: + var newExp = body as NewExpression; + if (newExp.Members?.Count > 0) + { + for (var a = 0; a < newExp.Members.Count; a++) + { + var memberName = newExp.Members[a].Name; + if (_table.ColumnsByCsIgnore.ContainsKey(memberName)) continue; + if (_table.ColumnsByCs.TryGetValue(memberName, out var col) == false) throw new Exception($"找不到属性:{memberName}"); + var memberValue = _commonExpression.ExpressionLambdaToSql(newExp.Arguments[a], new CommonExpression.ExpTSC { }); + _setIncr.Append(", ").Append(_commonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = ").Append(memberValue); + } + } + return this; } if (body is BinaryExpression == false && nodeType != ExpressionType.Call) return this;