- 修复 ISelect ToList<T>("id,title") 属性和字段顺序不同时的问题;

This commit is contained in:
28810 2020-08-17 22:05:05 +08:00
parent 309b4ba60a
commit 113a5d3092
4 changed files with 59 additions and 28 deletions

View File

@ -130,13 +130,6 @@
清空状态数据 清空状态数据
</summary> </summary>
</member> </member>
<member name="M:FreeSql.DbSet`1.RemoveAsync(System.Linq.Expressions.Expression{System.Func{`0,System.Boolean}})">
<summary>
根据 lambda 条件删除数据
</summary>
<param name="predicate"></param>
<returns></returns>
</member>
<member name="M:FreeSql.DbSet`1.Add(`0)"> <member name="M:FreeSql.DbSet`1.Add(`0)">
<summary> <summary>
添加 添加
@ -532,14 +525,5 @@
<param name="that"></param> <param name="that"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])">
<summary>
批量注入 Repository可以参考代码自行调整
</summary>
<param name="services"></param>
<param name="globalDataFilter"></param>
<param name="assemblies"></param>
<returns></returns>
</member>
</members> </members>
</doc> </doc>

View File

@ -73,6 +73,42 @@ namespace FreeSql.Tests.PerformanceTest
time.Stop(); time.Stop();
sb.AppendLine($"Elapsed: {time.Elapsed}; Query Dynamic Counts: {t3.Count}; ORM: FreeSql*"); sb.AppendLine($"Elapsed: {time.Elapsed}; Query Dynamic Counts: {t3.Count}; ORM: FreeSql*");
var t411 = g.mysql.Select<xxx>().Limit(1).ToList<xxx_dto1>("id,title,url").FirstOrDefault();
var t412 = g.mysql.Select<xxx>().Limit(1).Where(a => a.Id == t411.Id).ToList<xxx_dto1>("id,url,title").FirstOrDefault();
var t413 = g.mysql.Select<xxx>().Limit(1).Where(a => a.Id == t411.Id).ToList<xxx_dto2>("id,title,url").FirstOrDefault();
var t414 = g.mysql.Select<xxx>().Limit(1).Where(a => a.Id == t411.Id).ToList<xxx_dto2>("id,url,title").FirstOrDefault();
var t415 = g.mysql.Select<xxx>().Limit(1).Where(a => a.Id == t411.Id).ToList<xxx_dto2>("url,title,id").FirstOrDefault();
var t416 = g.mysql.Select<xxx>().Limit(1).Where(a => a.Id == t411.Id).ToList<xxx_dto2>("title,url,id").FirstOrDefault();
Assert.Equal(t411.Title, t412.Title);
Assert.Equal(t412.Title, t413.Title);
Assert.Equal(t413.Title, t414.Title);
Assert.Equal(t414.Title, t415.Title);
Assert.Equal(t415.Title, t416.Title);
Assert.Equal(t411.Url, t412.Url);
Assert.Equal(t412.Url, t413.Url);
Assert.Equal(t413.Url, t414.Url);
Assert.Equal(t414.Url, t415.Url);
Assert.Equal(t415.Url, t416.Url);
Assert.Equal(t411.Id, t412.Id);
Assert.Equal(t412.Id, t413.Id);
Assert.Equal(t413.Id, t414.Id);
Assert.Equal(t414.Id, t415.Id);
Assert.Equal(t415.Id, t416.Id);
}
class xxx_dto1
{
public int Id { get; set; }
public string Title { get; set; }
public string Url { get; set; }
}
class xxx_dto2
{
public int Id { get; set; }
public string Url { get; set; }
public string Title { get; set; }
} }
[Fact] [Fact]

View File

@ -52,16 +52,21 @@ namespace FreeSql.Internal.CommonProvider
var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms); var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms);
_orm.Aop.CurdBeforeHandler?.Invoke(this, before); _orm.Aop.CurdBeforeHandler?.Invoke(this, before);
var ret = new List<TTuple>(); var ret = new List<TTuple>();
var flagStr = $"ToListField:{field}";
Exception exception = null; Exception exception = null;
try try
{ {
if (type.IsClass)
ret = _orm.Ado.Query<TTuple>(_connection, _transaction, CommandType.Text, sql, dbParms);
else
{
var flagStr = $"ToListField:{field}";
_orm.Ado.ExecuteReader(_connection, _transaction, fetch => _orm.Ado.ExecuteReader(_connection, _transaction, fetch =>
{ {
var read = Utils.ExecuteArrayRowReadClassOrTuple(flagStr, type, null, fetch.Object, 0, _commonUtils); var read = Utils.ExecuteArrayRowReadClassOrTuple(flagStr, type, null, fetch.Object, 0, _commonUtils);
ret.Add((TTuple)read.Value); ret.Add((TTuple)read.Value);
}, CommandType.Text, sql, dbParms); }, CommandType.Text, sql, dbParms);
} }
}
catch (Exception ex) catch (Exception ex)
{ {
exception = ex; exception = ex;
@ -748,10 +753,14 @@ namespace FreeSql.Internal.CommonProvider
var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms); var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms);
_orm.Aop.CurdBeforeHandler?.Invoke(this, before); _orm.Aop.CurdBeforeHandler?.Invoke(this, before);
var ret = new List<TTuple>(); var ret = new List<TTuple>();
var flagStr = $"ToListField:{field}";
Exception exception = null; Exception exception = null;
try try
{ {
if (type.IsClass)
ret = await _orm.Ado.QueryAsync<TTuple>(_connection, _transaction, CommandType.Text, sql, dbParms);
else
{
var flagStr = $"ToListField:{field}";
await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, fetch => await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, fetch =>
{ {
var read = Utils.ExecuteArrayRowReadClassOrTuple(flagStr, type, null, fetch.Object, 0, _commonUtils); var read = Utils.ExecuteArrayRowReadClassOrTuple(flagStr, type, null, fetch.Object, 0, _commonUtils);
@ -759,6 +768,7 @@ namespace FreeSql.Internal.CommonProvider
return Task.FromResult(false); return Task.FromResult(false);
}, CommandType.Text, sql, dbParms); }, CommandType.Text, sql, dbParms);
} }
}
catch (Exception ex) catch (Exception ex)
{ {
exception = ex; exception = ex;

View File

@ -187,7 +187,8 @@ QQ群4336577(已满)、8578575(在线)
## 💕  Donation ## 💕  Donation
L*y 58元、花花 88元、麦兜很乖 50元、网络来者 2000元、John 99.99元、alex 666元、bacongao 36元、无名 100元、Eternity 188元、无名 10元、⌒.Helper~..oO 66元、习惯与被习惯 100元、无名 100元、蔡易喋 88.88元、中讯科技 1000元、Good Good Work 24元、炽焰 6.6元、Nothing 100元、兰州天擎赵 500元、哈利路亚 300元 L*y 58元、花花 88元、麦兜很乖 50元、网络来者 2000元、John 99.99元、alex 666元、bacongao 36元、无名 100元、Eternity 188元、无名 10元、⌒.Helper~..oO 66元、习惯与被习惯 100元、无名 100元、蔡易喋 88.88元、中讯科技 1000元、Good Good Work 24元、炽焰 6.6元、Nothing 100元、兰州天擎赵 500元、哈利路亚 300元、
无名 100元
> Thank you for your donation > Thank you for your donation