From 560534f3bc2c021b7672dc29be5dacacb87bf133 Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Thu, 28 May 2020 17:23:24 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20IUpdate=20Set(?= =?UTF-8?q?=E8=A1=A8=E8=BE=BE=E5=BC=8F)=20MapType=20=E6=9C=AA=E7=94=9F?= =?UTF-8?q?=E6=95=88=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.Tests/FreeSql.Tests/Issues/311.cs | 40 +++++++++++++++++++ .../Internal/CommonProvider/UpdateProvider.cs | 6 +-- 2 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 FreeSql.Tests/FreeSql.Tests/Issues/311.cs diff --git a/FreeSql.Tests/FreeSql.Tests/Issues/311.cs b/FreeSql.Tests/FreeSql.Tests/Issues/311.cs new file mode 100644 index 00000000..aed5245c --- /dev/null +++ b/FreeSql.Tests/FreeSql.Tests/Issues/311.cs @@ -0,0 +1,40 @@ +using FreeSql.DataAnnotations; +using System; +using System.Collections.Generic; +using System.Text; +using Xunit; + +namespace FreeSql.Tests.Issues +{ + public class _311 + { + [Fact] + public void SelectTest() + { + IFreeSql db = g.mysql; + + var sql = db.Update(1).Set(a => new UpdateSetEnum01 { Status01 = EnumStatus01.E01001, Status02 = EnumStatus02.E02003 }).ToSql(); + Assert.Equal(@"UPDATE `UpdateSetEnum01` SET `Status01` = 'E01001', `Status02` = 2 +WHERE (`ID` = 1)", sql); + + sql = db.Update(1).Set(a => new UpdateSetEnum01 { Status01 = null, Status02 = null }).ToSql(); + Assert.Equal(@"UPDATE `UpdateSetEnum01` SET `Status01` = NULL, `Status02` = NULL +WHERE (`ID` = 1)", sql); + + sql = db.Update(1).Set(a => a.Status01 == null).Set(a => a.Status02 == null).ToSql(); + Assert.Equal(@"UPDATE `UpdateSetEnum01` SET `Status01` = NULL, `Status02` = NULL +WHERE (`ID` = 1)", sql); + } + + public class UpdateSetEnum01 + { + public int ID { get; set; } + public EnumStatus01? Status01 { get; set; } + [Column(MapType = typeof(int))] + public EnumStatus02? Status02 { get; set; } + } + + public enum EnumStatus01 { E01001, E01002, E01003 } + public enum EnumStatus02 { E02001, E02002, E02003 } + } +} diff --git a/FreeSql/Internal/CommonProvider/UpdateProvider.cs b/FreeSql/Internal/CommonProvider/UpdateProvider.cs index 1757826b..7385aa2f 100644 --- a/FreeSql/Internal/CommonProvider/UpdateProvider.cs +++ b/FreeSql/Internal/CommonProvider/UpdateProvider.cs @@ -420,7 +420,7 @@ namespace FreeSql.Internal.CommonProvider case ExpressionType.Equal: var equalBinaryExp = body as BinaryExpression; var eqval = _commonExpression.ExpressionWhereLambdaNoneForeignObject(null, _table, null, body, null, null); - if (eqval.EndsWith(" IS NULL")) eqval = $"{eqval.Remove(eqval.Length - 10)} = NULL"; //issues/311 + if (eqval.EndsWith(" IS NULL")) eqval = $"{eqval.Remove(eqval.Length - 10)} = NULL"; //#311 _set.Append(", ").Append(eqval); return this; case ExpressionType.MemberInit: @@ -434,7 +434,7 @@ namespace FreeSql.Internal.CommonProvider 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 { isQuoteName = true }); + var memberValue = _commonExpression.ExpressionLambdaToSql(initAssignExp.Expression, new CommonExpression.ExpTSC { isQuoteName = true, mapType = col.Attribute.MapType }); _setIncr.Append(", ").Append(_commonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = ").Append(memberValue); } } @@ -448,7 +448,7 @@ namespace FreeSql.Internal.CommonProvider 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 { isQuoteName = true }); + var memberValue = _commonExpression.ExpressionLambdaToSql(newExp.Arguments[a], new CommonExpression.ExpTSC { isQuoteName = true, mapType = col.Attribute.MapType }); _setIncr.Append(", ").Append(_commonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = ").Append(memberValue); } }