- 修改 Query 查询的实体设置了 IsIgnore 时,可能出现 ET 读取位置偏移 bug;

This commit is contained in:
28810 2019-05-13 17:59:27 +08:00
parent 79e21295c3
commit 5fe35f67e9
5 changed files with 87 additions and 63 deletions

View File

@ -32,6 +32,13 @@ namespace FreeSql.Tests.Sqlite {
[Fact] [Fact]
public void Query() { public void Query() {
var t0 = g.sqlite.Ado.Query<testallDto>("select * from \"song\"");
var t1 = g.sqlite.Ado.Query<testallDto>("select id, url, create_time from \"song\"");
var t2 = g.sqlite.Ado.Query<testallDto>("select id, url, create_time test_time from \"song\"");
var t3 = g.sqlite.Ado.Query<xxx>("select * from \"song\""); var t3 = g.sqlite.Ado.Query<xxx>("select * from \"song\"");
var t4 = g.sqlite.Ado.Query<(int, string, string)>("select * from \"song\""); var t4 = g.sqlite.Ado.Query<(int, string, string)>("select * from \"song\"");
@ -49,5 +56,14 @@ namespace FreeSql.Tests.Sqlite {
public string Path { get; set; } public string Path { get; set; }
public string Title2 { get; set; } public string Title2 { get; set; }
} }
class testallDto {
public int Id { get; set; }
public string Title { get; set; }
public string Url { get; set; }
public DateTime Test_time { get; set; }
public DateTime Create_time { get; set; }
public bool Is_deleted { get; set; }
}
} }
} }

View File

@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework> <TargetFramework>netstandard2.0</TargetFramework>
<Version>0.5.15</Version> <Version>0.5.16</Version>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild> <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Authors>YeXiangQin</Authors> <Authors>YeXiangQin</Authors>
<Description>FreeSql is the most convenient ORM in dotnet. It supports Mysql, Postgresql, SqlServer, Oracle and Sqlite.</Description> <Description>FreeSql is the most convenient ORM in dotnet. It supports Mysql, Postgresql, SqlServer, Oracle and Sqlite.</Description>

View File

@ -75,7 +75,12 @@ namespace FreeSql.Internal.CommonProvider {
if (isThrowException) throw e; if (isThrowException) throw e;
} }
internal static ConcurrentDictionary<Type, PropertyInfo[]> dicQueryTypeGetProperties = new ConcurrentDictionary<Type, PropertyInfo[]>(); internal static ConcurrentDictionary<Type, Dictionary<string, PropertyInfo>> dicQueryTypeGetProperties = new ConcurrentDictionary<Type, Dictionary<string, PropertyInfo>>();
internal Dictionary<string, PropertyInfo> GetQueryTypeProperties(Type type) {
var tb = _util.GetTableByEntity(type);
var props = tb?.Properties ?? dicQueryTypeGetProperties.GetOrAdd(type, k => type.GetProperties().ToDictionary(a => a.Name, a => a, StringComparer.CurrentCultureIgnoreCase));
return props;
}
public List<T> Query<T>(string cmdText, object parms = null) => Query<T>(null, null, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms)); public List<T> Query<T>(string cmdText, object parms = null) => Query<T>(null, null, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));
public List<T> Query<T>(DbTransaction transaction, string cmdText, object parms = null) => Query<T>(null, transaction, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms)); public List<T> Query<T>(DbTransaction transaction, string cmdText, object parms = null) => Query<T>(null, transaction, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));
public List<T> Query<T>(DbConnection connection, DbTransaction transaction, string cmdText, object parms = null) => Query<T>(connection, transaction, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms)); public List<T> Query<T>(DbConnection connection, DbTransaction transaction, string cmdText, object parms = null) => Query<T>(connection, transaction, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));
@ -87,7 +92,7 @@ namespace FreeSql.Internal.CommonProvider {
var type = typeof(T); var type = typeof(T);
string flag = null; string flag = null;
int[] indexes = null; int[] indexes = null;
var props = dicQueryTypeGetProperties.GetOrAdd(type, k => type.GetProperties()); var props = GetQueryTypeProperties(type);
ExecuteReader(connection, transaction, dr => { ExecuteReader(connection, transaction, dr => {
if (indexes == null) { if (indexes == null) {
var sbflag = new StringBuilder().Append("query"); var sbflag = new StringBuilder().Append("query");
@ -97,7 +102,7 @@ namespace FreeSql.Internal.CommonProvider {
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
} }
indexes = props.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); indexes = props.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
flag = sbflag.ToString(); flag = sbflag.ToString();
} }
ret.Add((T)Utils.ExecuteArrayRowReadClassOrTuple(flag, type, indexes, dr, 0, _util).Value); ret.Add((T)Utils.ExecuteArrayRowReadClassOrTuple(flag, type, indexes, dr, 0, _util).Value);
@ -116,13 +121,13 @@ namespace FreeSql.Internal.CommonProvider {
var type1 = typeof(T1); var type1 = typeof(T1);
string flag1 = null; string flag1 = null;
int[] indexes1 = null; int[] indexes1 = null;
var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties()); var props1 = GetQueryTypeProperties(type1);
var ret2 = new List<T2>(); var ret2 = new List<T2>();
var type2 = typeof(T2); var type2 = typeof(T2);
string flag2 = null; string flag2 = null;
int[] indexes2 = null; int[] indexes2 = null;
var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties()); var props2 = GetQueryTypeProperties(type2);
ExecuteReaderMultiple(2, connection, transaction, (dr, result) => { ExecuteReaderMultiple(2, connection, transaction, (dr, result) => {
switch(result) { switch(result) {
case 0: case 0:
@ -134,7 +139,7 @@ namespace FreeSql.Internal.CommonProvider {
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
} }
indexes1 = props1.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); indexes1 = props1.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
flag1 = sbflag.ToString(); flag1 = sbflag.ToString();
} }
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value); ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value);
@ -148,7 +153,7 @@ namespace FreeSql.Internal.CommonProvider {
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
} }
indexes2 = props2.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); indexes2 = props2.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
flag2 = sbflag.ToString(); flag2 = sbflag.ToString();
} }
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value); ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value);
@ -169,19 +174,19 @@ namespace FreeSql.Internal.CommonProvider {
var type1 = typeof(T1); var type1 = typeof(T1);
string flag1 = null; string flag1 = null;
int[] indexes1 = null; int[] indexes1 = null;
var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties()); var props1 = GetQueryTypeProperties(type1);
var ret2 = new List<T2>(); var ret2 = new List<T2>();
var type2 = typeof(T2); var type2 = typeof(T2);
string flag2 = null; string flag2 = null;
int[] indexes2 = null; int[] indexes2 = null;
var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties()); var props2 = GetQueryTypeProperties(type2);
var ret3 = new List<T3>(); var ret3 = new List<T3>();
var type3 = typeof(T3); var type3 = typeof(T3);
string flag3 = null; string flag3 = null;
int[] indexes3 = null; int[] indexes3 = null;
var props3 = dicQueryTypeGetProperties.GetOrAdd(type3, k => type1.GetProperties()); var props3 = GetQueryTypeProperties(type3);
ExecuteReaderMultiple(3, connection, transaction, (dr, result) => { ExecuteReaderMultiple(3, connection, transaction, (dr, result) => {
switch (result) { switch (result) {
case 0: case 0:
@ -193,7 +198,7 @@ namespace FreeSql.Internal.CommonProvider {
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
} }
indexes1 = props1.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); indexes1 = props1.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
flag1 = sbflag.ToString(); flag1 = sbflag.ToString();
} }
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value); ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value);
@ -207,7 +212,7 @@ namespace FreeSql.Internal.CommonProvider {
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
} }
indexes2 = props2.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); indexes2 = props2.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
flag2 = sbflag.ToString(); flag2 = sbflag.ToString();
} }
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value); ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value);
@ -221,7 +226,7 @@ namespace FreeSql.Internal.CommonProvider {
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
} }
indexes3 = props3.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); indexes3 = props3.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
flag3 = sbflag.ToString(); flag3 = sbflag.ToString();
} }
ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, dr, 0, _util).Value); ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, dr, 0, _util).Value);
@ -242,25 +247,25 @@ namespace FreeSql.Internal.CommonProvider {
var type1 = typeof(T1); var type1 = typeof(T1);
string flag1 = null; string flag1 = null;
int[] indexes1 = null; int[] indexes1 = null;
var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties()); var props1 = GetQueryTypeProperties(type1);
var ret2 = new List<T2>(); var ret2 = new List<T2>();
var type2 = typeof(T2); var type2 = typeof(T2);
string flag2 = null; string flag2 = null;
int[] indexes2 = null; int[] indexes2 = null;
var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties()); var props2 = GetQueryTypeProperties(type2);
var ret3 = new List<T3>(); var ret3 = new List<T3>();
var type3 = typeof(T3); var type3 = typeof(T3);
string flag3 = null; string flag3 = null;
int[] indexes3 = null; int[] indexes3 = null;
var props3 = dicQueryTypeGetProperties.GetOrAdd(type3, k => type1.GetProperties()); var props3 = GetQueryTypeProperties(type3);
var ret4 = new List<T4>(); var ret4 = new List<T4>();
var type4 = typeof(T4); var type4 = typeof(T4);
string flag4 = null; string flag4 = null;
int[] indexes4 = null; int[] indexes4 = null;
var props4 = dicQueryTypeGetProperties.GetOrAdd(type4, k => type1.GetProperties()); var props4 = GetQueryTypeProperties(type4);
ExecuteReaderMultiple(4, connection, transaction, (dr, result) => { ExecuteReaderMultiple(4, connection, transaction, (dr, result) => {
switch (result) { switch (result) {
case 0: case 0:
@ -272,7 +277,7 @@ namespace FreeSql.Internal.CommonProvider {
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
} }
indexes1 = props1.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); indexes1 = props1.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
flag1 = sbflag.ToString(); flag1 = sbflag.ToString();
} }
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value); ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value);
@ -286,7 +291,7 @@ namespace FreeSql.Internal.CommonProvider {
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
} }
indexes2 = props2.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); indexes2 = props2.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
flag2 = sbflag.ToString(); flag2 = sbflag.ToString();
} }
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value); ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value);
@ -300,7 +305,7 @@ namespace FreeSql.Internal.CommonProvider {
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
} }
indexes3 = props3.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); indexes3 = props3.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
flag3 = sbflag.ToString(); flag3 = sbflag.ToString();
} }
ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, dr, 0, _util).Value); ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, dr, 0, _util).Value);
@ -314,7 +319,7 @@ namespace FreeSql.Internal.CommonProvider {
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
} }
indexes4 = props4.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); indexes4 = props4.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
flag4 = sbflag.ToString(); flag4 = sbflag.ToString();
} }
ret4.Add((T4)Utils.ExecuteArrayRowReadClassOrTuple(flag4, type4, indexes4, dr, 0, _util).Value); ret4.Add((T4)Utils.ExecuteArrayRowReadClassOrTuple(flag4, type4, indexes4, dr, 0, _util).Value);
@ -335,31 +340,31 @@ namespace FreeSql.Internal.CommonProvider {
var type1 = typeof(T1); var type1 = typeof(T1);
string flag1 = null; string flag1 = null;
int[] indexes1 = null; int[] indexes1 = null;
var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties()); var props1 = GetQueryTypeProperties(type1);
var ret2 = new List<T2>(); var ret2 = new List<T2>();
var type2 = typeof(T2); var type2 = typeof(T2);
string flag2 = null; string flag2 = null;
int[] indexes2 = null; int[] indexes2 = null;
var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties()); var props2 = GetQueryTypeProperties(type2);
var ret3 = new List<T3>(); var ret3 = new List<T3>();
var type3 = typeof(T3); var type3 = typeof(T3);
string flag3 = null; string flag3 = null;
int[] indexes3 = null; int[] indexes3 = null;
var props3 = dicQueryTypeGetProperties.GetOrAdd(type3, k => type1.GetProperties()); var props3 = GetQueryTypeProperties(type3);
var ret4 = new List<T4>(); var ret4 = new List<T4>();
var type4 = typeof(T4); var type4 = typeof(T4);
string flag4 = null; string flag4 = null;
int[] indexes4 = null; int[] indexes4 = null;
var props4 = dicQueryTypeGetProperties.GetOrAdd(type4, k => type1.GetProperties()); var props4 = GetQueryTypeProperties(type4);
var ret5 = new List<T5>(); var ret5 = new List<T5>();
var type5 = typeof(T5); var type5 = typeof(T5);
string flag5 = null; string flag5 = null;
int[] indexes5 = null; int[] indexes5 = null;
var props5 = dicQueryTypeGetProperties.GetOrAdd(type5, k => type1.GetProperties()); var props5 = GetQueryTypeProperties(type5);
ExecuteReaderMultiple(5, connection, transaction, (dr, result) => { ExecuteReaderMultiple(5, connection, transaction, (dr, result) => {
switch (result) { switch (result) {
case 0: case 0:
@ -371,7 +376,7 @@ namespace FreeSql.Internal.CommonProvider {
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
} }
indexes1 = props1.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); indexes1 = props1.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
flag1 = sbflag.ToString(); flag1 = sbflag.ToString();
} }
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value); ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value);
@ -385,7 +390,7 @@ namespace FreeSql.Internal.CommonProvider {
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
} }
indexes2 = props2.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); indexes2 = props2.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
flag2 = sbflag.ToString(); flag2 = sbflag.ToString();
} }
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value); ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value);
@ -399,7 +404,7 @@ namespace FreeSql.Internal.CommonProvider {
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
} }
indexes3 = props3.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); indexes3 = props3.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
flag3 = sbflag.ToString(); flag3 = sbflag.ToString();
} }
ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, dr, 0, _util).Value); ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, dr, 0, _util).Value);
@ -413,7 +418,7 @@ namespace FreeSql.Internal.CommonProvider {
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
} }
indexes4 = props4.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); indexes4 = props4.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
flag4 = sbflag.ToString(); flag4 = sbflag.ToString();
} }
ret4.Add((T4)Utils.ExecuteArrayRowReadClassOrTuple(flag4, type4, indexes4, dr, 0, _util).Value); ret4.Add((T4)Utils.ExecuteArrayRowReadClassOrTuple(flag4, type4, indexes4, dr, 0, _util).Value);
@ -427,7 +432,7 @@ namespace FreeSql.Internal.CommonProvider {
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
} }
indexes5 = props5.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); indexes5 = props5.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
flag5 = sbflag.ToString(); flag5 = sbflag.ToString();
} }
ret5.Add((T5)Utils.ExecuteArrayRowReadClassOrTuple(flag5, type5, indexes5, dr, 0, _util).Value); ret5.Add((T5)Utils.ExecuteArrayRowReadClassOrTuple(flag5, type5, indexes5, dr, 0, _util).Value);

View File

@ -20,7 +20,7 @@ namespace FreeSql.Internal.CommonProvider {
var type = typeof(T); var type = typeof(T);
string flag = null; string flag = null;
int[] indexes = null; int[] indexes = null;
var props = dicQueryTypeGetProperties.GetOrAdd(type, k => type.GetProperties()); var props = GetQueryTypeProperties(type);
await ExecuteReaderAsync(connection, transaction, dr => { await ExecuteReaderAsync(connection, transaction, dr => {
if (indexes == null) { if (indexes == null) {
var sbflag = new StringBuilder().Append("query"); var sbflag = new StringBuilder().Append("query");
@ -30,7 +30,7 @@ namespace FreeSql.Internal.CommonProvider {
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
} }
indexes = props.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); indexes = props.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
flag = sbflag.ToString(); flag = sbflag.ToString();
} }
ret.Add((T)Utils.ExecuteArrayRowReadClassOrTuple(flag, type, indexes, dr, 0, _util).Value); ret.Add((T)Utils.ExecuteArrayRowReadClassOrTuple(flag, type, indexes, dr, 0, _util).Value);
@ -50,13 +50,13 @@ namespace FreeSql.Internal.CommonProvider {
var type1 = typeof(T1); var type1 = typeof(T1);
string flag1 = null; string flag1 = null;
int[] indexes1 = null; int[] indexes1 = null;
var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties()); var props1 = GetQueryTypeProperties(type1);
var ret2 = new List<T2>(); var ret2 = new List<T2>();
var type2 = typeof(T2); var type2 = typeof(T2);
string flag2 = null; string flag2 = null;
int[] indexes2 = null; int[] indexes2 = null;
var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties()); var props2 = GetQueryTypeProperties(type2);
await ExecuteReaderMultipleAsync(2, connection, transaction, (dr, result) => { await ExecuteReaderMultipleAsync(2, connection, transaction, (dr, result) => {
switch (result) { switch (result) {
case 0: case 0:
@ -68,7 +68,7 @@ namespace FreeSql.Internal.CommonProvider {
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
} }
indexes1 = props1.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); indexes1 = props1.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
flag1 = sbflag.ToString(); flag1 = sbflag.ToString();
} }
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value); ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value);
@ -82,7 +82,7 @@ namespace FreeSql.Internal.CommonProvider {
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
} }
indexes2 = props2.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); indexes2 = props2.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
flag2 = sbflag.ToString(); flag2 = sbflag.ToString();
} }
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value); ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value);
@ -104,19 +104,19 @@ namespace FreeSql.Internal.CommonProvider {
var type1 = typeof(T1); var type1 = typeof(T1);
string flag1 = null; string flag1 = null;
int[] indexes1 = null; int[] indexes1 = null;
var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties()); var props1 = GetQueryTypeProperties(type1);
var ret2 = new List<T2>(); var ret2 = new List<T2>();
var type2 = typeof(T2); var type2 = typeof(T2);
string flag2 = null; string flag2 = null;
int[] indexes2 = null; int[] indexes2 = null;
var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties()); var props2 = GetQueryTypeProperties(type2);
var ret3 = new List<T3>(); var ret3 = new List<T3>();
var type3 = typeof(T3); var type3 = typeof(T3);
string flag3 = null; string flag3 = null;
int[] indexes3 = null; int[] indexes3 = null;
var props3 = dicQueryTypeGetProperties.GetOrAdd(type3, k => type1.GetProperties()); var props3 = GetQueryTypeProperties(type3);
await ExecuteReaderMultipleAsync(3, connection, transaction, (dr, result) => { await ExecuteReaderMultipleAsync(3, connection, transaction, (dr, result) => {
switch (result) { switch (result) {
case 0: case 0:
@ -128,7 +128,7 @@ namespace FreeSql.Internal.CommonProvider {
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
} }
indexes1 = props1.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); indexes1 = props1.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
flag1 = sbflag.ToString(); flag1 = sbflag.ToString();
} }
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value); ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value);
@ -142,7 +142,7 @@ namespace FreeSql.Internal.CommonProvider {
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
} }
indexes2 = props2.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); indexes2 = props2.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
flag2 = sbflag.ToString(); flag2 = sbflag.ToString();
} }
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value); ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value);
@ -156,7 +156,7 @@ namespace FreeSql.Internal.CommonProvider {
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
} }
indexes3 = props3.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); indexes3 = props3.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
flag3 = sbflag.ToString(); flag3 = sbflag.ToString();
} }
ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, dr, 0, _util).Value); ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, dr, 0, _util).Value);
@ -178,25 +178,25 @@ namespace FreeSql.Internal.CommonProvider {
var type1 = typeof(T1); var type1 = typeof(T1);
string flag1 = null; string flag1 = null;
int[] indexes1 = null; int[] indexes1 = null;
var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties()); var props1 = GetQueryTypeProperties(type1);
var ret2 = new List<T2>(); var ret2 = new List<T2>();
var type2 = typeof(T2); var type2 = typeof(T2);
string flag2 = null; string flag2 = null;
int[] indexes2 = null; int[] indexes2 = null;
var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties()); var props2 = GetQueryTypeProperties(type2);
var ret3 = new List<T3>(); var ret3 = new List<T3>();
var type3 = typeof(T3); var type3 = typeof(T3);
string flag3 = null; string flag3 = null;
int[] indexes3 = null; int[] indexes3 = null;
var props3 = dicQueryTypeGetProperties.GetOrAdd(type3, k => type1.GetProperties()); var props3 = GetQueryTypeProperties(type3);
var ret4 = new List<T4>(); var ret4 = new List<T4>();
var type4 = typeof(T4); var type4 = typeof(T4);
string flag4 = null; string flag4 = null;
int[] indexes4 = null; int[] indexes4 = null;
var props4 = dicQueryTypeGetProperties.GetOrAdd(type4, k => type1.GetProperties()); var props4 = GetQueryTypeProperties(type4);
await ExecuteReaderMultipleAsync(4, connection, transaction, (dr, result) => { await ExecuteReaderMultipleAsync(4, connection, transaction, (dr, result) => {
switch (result) { switch (result) {
case 0: case 0:
@ -208,7 +208,7 @@ namespace FreeSql.Internal.CommonProvider {
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
} }
indexes1 = props1.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); indexes1 = props1.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
flag1 = sbflag.ToString(); flag1 = sbflag.ToString();
} }
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value); ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value);
@ -222,7 +222,7 @@ namespace FreeSql.Internal.CommonProvider {
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
} }
indexes2 = props2.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); indexes2 = props2.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
flag2 = sbflag.ToString(); flag2 = sbflag.ToString();
} }
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value); ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value);
@ -236,7 +236,7 @@ namespace FreeSql.Internal.CommonProvider {
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
} }
indexes3 = props3.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); indexes3 = props3.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
flag3 = sbflag.ToString(); flag3 = sbflag.ToString();
} }
ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, dr, 0, _util).Value); ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, dr, 0, _util).Value);
@ -250,7 +250,7 @@ namespace FreeSql.Internal.CommonProvider {
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
} }
indexes4 = props4.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); indexes4 = props4.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
flag4 = sbflag.ToString(); flag4 = sbflag.ToString();
} }
ret4.Add((T4)Utils.ExecuteArrayRowReadClassOrTuple(flag4, type4, indexes4, dr, 0, _util).Value); ret4.Add((T4)Utils.ExecuteArrayRowReadClassOrTuple(flag4, type4, indexes4, dr, 0, _util).Value);
@ -272,31 +272,31 @@ namespace FreeSql.Internal.CommonProvider {
var type1 = typeof(T1); var type1 = typeof(T1);
string flag1 = null; string flag1 = null;
int[] indexes1 = null; int[] indexes1 = null;
var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties()); var props1 = GetQueryTypeProperties(type1);
var ret2 = new List<T2>(); var ret2 = new List<T2>();
var type2 = typeof(T2); var type2 = typeof(T2);
string flag2 = null; string flag2 = null;
int[] indexes2 = null; int[] indexes2 = null;
var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties()); var props2 = GetQueryTypeProperties(type2);
var ret3 = new List<T3>(); var ret3 = new List<T3>();
var type3 = typeof(T3); var type3 = typeof(T3);
string flag3 = null; string flag3 = null;
int[] indexes3 = null; int[] indexes3 = null;
var props3 = dicQueryTypeGetProperties.GetOrAdd(type3, k => type1.GetProperties()); var props3 = GetQueryTypeProperties(type3);
var ret4 = new List<T4>(); var ret4 = new List<T4>();
var type4 = typeof(T4); var type4 = typeof(T4);
string flag4 = null; string flag4 = null;
int[] indexes4 = null; int[] indexes4 = null;
var props4 = dicQueryTypeGetProperties.GetOrAdd(type4, k => type1.GetProperties()); var props4 = GetQueryTypeProperties(type4);
var ret5 = new List<T5>(); var ret5 = new List<T5>();
var type5 = typeof(T5); var type5 = typeof(T5);
string flag5 = null; string flag5 = null;
int[] indexes5 = null; int[] indexes5 = null;
var props5 = dicQueryTypeGetProperties.GetOrAdd(type5, k => type1.GetProperties()); var props5 = GetQueryTypeProperties(type5);
await ExecuteReaderMultipleAsync(5, connection, transaction, (dr, result) => { await ExecuteReaderMultipleAsync(5, connection, transaction, (dr, result) => {
switch (result) { switch (result) {
case 0: case 0:
@ -308,7 +308,7 @@ namespace FreeSql.Internal.CommonProvider {
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
} }
indexes1 = props1.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); indexes1 = props1.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
flag1 = sbflag.ToString(); flag1 = sbflag.ToString();
} }
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value); ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value);
@ -322,7 +322,7 @@ namespace FreeSql.Internal.CommonProvider {
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
} }
indexes2 = props2.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); indexes2 = props2.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
flag2 = sbflag.ToString(); flag2 = sbflag.ToString();
} }
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value); ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value);
@ -336,7 +336,7 @@ namespace FreeSql.Internal.CommonProvider {
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
} }
indexes3 = props3.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); indexes3 = props3.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
flag3 = sbflag.ToString(); flag3 = sbflag.ToString();
} }
ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, dr, 0, _util).Value); ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, dr, 0, _util).Value);
@ -350,7 +350,7 @@ namespace FreeSql.Internal.CommonProvider {
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
} }
indexes4 = props4.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); indexes4 = props4.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
flag4 = sbflag.ToString(); flag4 = sbflag.ToString();
} }
ret4.Add((T4)Utils.ExecuteArrayRowReadClassOrTuple(flag4, type4, indexes4, dr, 0, _util).Value); ret4.Add((T4)Utils.ExecuteArrayRowReadClassOrTuple(flag4, type4, indexes4, dr, 0, _util).Value);
@ -364,7 +364,7 @@ namespace FreeSql.Internal.CommonProvider {
sbflag.Append(name).Append(":").Append(a).Append(","); sbflag.Append(name).Append(":").Append(a).Append(",");
dic.Add(name, a); dic.Add(name, a);
} }
indexes5 = props5.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); indexes5 = props5.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
flag5 = sbflag.ToString(); flag5 = sbflag.ToString();
} }
ret5.Add((T5)Utils.ExecuteArrayRowReadClassOrTuple(flag5, type5, indexes5, dr, 0, _util).Value); ret5.Add((T5)Utils.ExecuteArrayRowReadClassOrTuple(flag5, type5, indexes5, dr, 0, _util).Value);

View File

@ -941,7 +941,10 @@ namespace FreeSql.Internal {
var props = type.GetProperties();//.ToDictionary(a => a.Name, a => a, StringComparer.CurrentCultureIgnoreCase); var props = type.GetProperties();//.ToDictionary(a => a.Name, a => a, StringComparer.CurrentCultureIgnoreCase);
var propIndex = 0; var propIndex = 0;
foreach (var prop in props) { foreach (var prop in props) {
if (typetb.ColumnsByCsIgnore.ContainsKey(prop.Name)) continue; if (typetb.ColumnsByCsIgnore.ContainsKey(prop.Name)) {
++propIndex;
continue;
}
var readType = typetb.ColumnsByCs.TryGetValue(prop.Name, out var trycol) ? trycol.Attribute.MapType : prop.PropertyType; var readType = typetb.ColumnsByCs.TryGetValue(prop.Name, out var trycol) ? trycol.Attribute.MapType : prop.PropertyType;
var ispkExp = new List<Expression>(); var ispkExp = new List<Expression>();