mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 18:52:50 +08:00
- 修复 IUpdate Set(表达式) MapType 未生效的问题;
This commit is contained in:
parent
add5923526
commit
560534f3bc
40
FreeSql.Tests/FreeSql.Tests/Issues/311.cs
Normal file
40
FreeSql.Tests/FreeSql.Tests/Issues/311.cs
Normal file
@ -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<UpdateSetEnum01>(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<UpdateSetEnum01>(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<UpdateSetEnum01>(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 }
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user