mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 18:52:50 +08:00
- 优化 指定 Dto 查询对 c# 字段的支持;
This commit is contained in:
parent
1e6c6fc9a8
commit
fcfeacdc95
35
FreeSql.Tests/FreeSql.Tests/UnitTest5.cs
Normal file
35
FreeSql.Tests/FreeSql.Tests/UnitTest5.cs
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
using AME.Helpers;
|
||||||
|
using FreeSql.DataAnnotations;
|
||||||
|
using FreeSql.Internal;
|
||||||
|
using FreeSql.Internal.CommonProvider;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading;
|
||||||
|
using Xunit;
|
||||||
|
using static FreeSql.Tests.UnitTest1;
|
||||||
|
|
||||||
|
namespace FreeSql.Tests
|
||||||
|
{
|
||||||
|
public class UnitTest5
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void TestUpdateDyWhere()
|
||||||
|
{
|
||||||
|
var fsql = g.sqlite;
|
||||||
|
|
||||||
|
var sql = fsql.Update<ts_up_dywhere01>(new { status = "xxx" })
|
||||||
|
.Set(a => a.status, "yyy")
|
||||||
|
.ToSql();
|
||||||
|
|
||||||
|
Assert.Equal(@"UPDATE ""ts_up_dywhere01"" SET ""status"" = @p_0
|
||||||
|
WHERE (""status"" = 'xxx')", sql);
|
||||||
|
}
|
||||||
|
class ts_up_dywhere01
|
||||||
|
{
|
||||||
|
public Guid id { get; set; }
|
||||||
|
public string status { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -280,6 +280,7 @@ namespace FreeSql.Internal
|
|||||||
CsType = initAssignExp.Expression.Type,
|
CsType = initAssignExp.Expression.Type,
|
||||||
MapType = initAssignExp.Expression.Type
|
MapType = initAssignExp.Expression.Type
|
||||||
};
|
};
|
||||||
|
if (child.Property == null) child.ReflectionField = initExp.Type.GetField(initExp.Bindings[a].Member.Name, BindingFlags.Public | BindingFlags.Instance);
|
||||||
parent.Childs.Add(child);
|
parent.Childs.Add(child);
|
||||||
ReadAnonymousField(_tables, field, child, ref index, initAssignExp.Expression, select, diymemexp, whereGlobalFilter, findIncludeMany, false);
|
ReadAnonymousField(_tables, field, child, ref index, initAssignExp.Expression, select, diymemexp, whereGlobalFilter, findIncludeMany, false);
|
||||||
}
|
}
|
||||||
@ -399,13 +400,17 @@ namespace FreeSql.Internal
|
|||||||
var isnull = notRead;
|
var isnull = notRead;
|
||||||
for (var b = ctorParmsLength; b < parent.Childs.Count; b++)
|
for (var b = ctorParmsLength; b < parent.Childs.Count; b++)
|
||||||
{
|
{
|
||||||
var prop = parent.Childs[b].Property;
|
|
||||||
var dbval = parent.IsEntity ? new ReadAnonymousDbValueRef() : null;
|
var dbval = parent.IsEntity ? new ReadAnonymousDbValueRef() : null;
|
||||||
var objval = ReadAnonymous(parent.Childs[b], dr, ref index, notRead, dbval, rowIndex, fillIncludeMany);
|
var objval = ReadAnonymous(parent.Childs[b], dr, ref index, notRead, dbval, rowIndex, fillIncludeMany);
|
||||||
if (isnull == false && parent.IsEntity && dbval.DbValue == null && parent.Table != null && parent.Table.ColumnsByCs.TryGetValue(parent.Childs[b].CsName, out var trycol) && trycol.Attribute.IsPrimary)
|
if (isnull == false && parent.IsEntity && dbval.DbValue == null && parent.Table != null && parent.Table.ColumnsByCs.TryGetValue(parent.Childs[b].CsName, out var trycol) && trycol.Attribute.IsPrimary)
|
||||||
isnull = true;
|
isnull = true;
|
||||||
if (isnull == false && prop.CanWrite)
|
|
||||||
prop.SetValue(ret, objval, null);
|
if (isnull == false)
|
||||||
|
{
|
||||||
|
var prop = parent.Childs[b].Property;
|
||||||
|
if (prop?.CanWrite == true) prop.SetValue(ret, objval, null);
|
||||||
|
else if (prop == null) parent.Childs[b].ReflectionField?.SetValue(ret, objval);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return isnull ? null : ret;
|
return isnull ? null : ret;
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ namespace FreeSql.Internal.Model
|
|||||||
public class ReadAnonymousTypeInfo
|
public class ReadAnonymousTypeInfo
|
||||||
{
|
{
|
||||||
public PropertyInfo Property { get; set; }
|
public PropertyInfo Property { get; set; }
|
||||||
|
public FieldInfo ReflectionField { get; set; }
|
||||||
public string CsName { get; set; }
|
public string CsName { get; set; }
|
||||||
public Type CsType { get; set; }
|
public Type CsType { get; set; }
|
||||||
public Type MapType { get; set; }
|
public Type MapType { get; set; }
|
||||||
@ -23,6 +24,7 @@ namespace FreeSql.Internal.Model
|
|||||||
public void CopyTo(ReadAnonymousTypeInfo target)
|
public void CopyTo(ReadAnonymousTypeInfo target)
|
||||||
{
|
{
|
||||||
target.Property = Property;
|
target.Property = Property;
|
||||||
|
target.ReflectionField = ReflectionField;
|
||||||
target.CsName = CsName;
|
target.CsName = CsName;
|
||||||
target.CsType = CsType;
|
target.CsType = CsType;
|
||||||
target.MapType = MapType;
|
target.MapType = MapType;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user