- 优化 IAdo.Query 方法,当传入带主键特性的实体时,防止主键列为 null 时导致整行记录也为 null;

This commit is contained in:
28810
2020-03-12 00:45:56 +08:00
parent fff7925d22
commit e132133e62
5 changed files with 85 additions and 65 deletions

View File

@@ -110,6 +110,13 @@
清空状态数据 清空状态数据
</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>
添加 添加

View File

@@ -2953,40 +2953,6 @@
<param name="end"></param> <param name="end"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:FreeSqlGlobalExpressionCall.Contains``2(System.Collections.Generic.IEnumerable{System.ValueTuple{``0,``1}},``0,``1)">
<summary>
C#:从元组集合中查找 exp1, exp2 是否存在<para></para>
SQL <para></para>
exp1 = that[0].Item1 and exp2 = that[0].Item2 OR <para></para>
exp1 = that[1].Item1 and exp2 = that[1].Item2 OR <para></para>
... <para></para>
注意:当 that 为 null 或 empty 时,返回 1=0
</summary>
<typeparam name="T1"></typeparam>
<typeparam name="T2"></typeparam>
<param name="that"></param>
<param name="exp1"></param>
<param name="exp2"></param>
<returns></returns>
</member>
<member name="M:FreeSqlGlobalExpressionCall.Contains``3(System.Collections.Generic.IEnumerable{System.ValueTuple{``0,``1,``2}},``0,``1,``2)">
<summary>
C#:从元组集合中查找 exp1, exp2, exp2 是否存在<para></para>
SQL <para></para>
exp1 = that[0].Item1 and exp2 = that[0].Item2 and exp3 = that[0].Item3 OR <para></para>
exp1 = that[1].Item1 and exp2 = that[1].Item2 and exp3 = that[1].Item3 OR <para></para>
... <para></para>
注意:当 that 为 null 或 empty 时,返回 1=0
</summary>
<typeparam name="T1"></typeparam>
<typeparam name="T2"></typeparam>
<typeparam name="T3"></typeparam>
<param name="that"></param>
<param name="exp1"></param>
<param name="exp2"></param>
<param name="exp3"></param>
<returns></returns>
</member>
<member name="M:FreeSqlGlobalExtensions.Distance(System.Drawing.Point,System.Drawing.Point)"> <member name="M:FreeSqlGlobalExtensions.Distance(System.Drawing.Point,System.Drawing.Point)">
<summary> <summary>
瘚钅<E7989A>銝支葵蝏讐漪摨衣<E691A8>頝萘氖嚗諹<E59A97><E8ABB9>𧼮<EFBFBD>雿㵪<E99BBF><EFBFBD> 瘚钅<E7989A>銝支葵蝏讐漪摨衣<E691A8>頝萘氖嚗諹<E59A97><E8ABB9>𧼮<EFBFBD>雿㵪<E99BBF><EFBFBD>
@@ -3251,3 +3217,49 @@
</member> </member>
</members> </members>
</doc> </doc>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗㕑◤<EFBFBD><EFBFBD>蝥輻<EFBFBD>鈭见𦛚<EFBFBD>芸𢆡<EFBFBD>𣂷漱
</summary>
<param name="handler">鈭见𦛚雿<EFBFBD> () => {}</param>
</member>
<member name="M:IFreeSql.Transaction(System.TimeSpan,System.Action)">
<summary>
<><E69298><EFBFBD><E887AD><EFBFBD>銝齿𣈲<E9BDBF><F0A388B2><EFBFBD>甇伐<E79487>
</summary>
<param name="timeout"><EFBFBD>𧒄嚗峕𧊋<EFBFBD><EFBFBD>摰峕<EFBFBD><EFBFBD><EFBFBD><EFBFBD>鋡怠<EFBFBD>隞𣇉瑪蝔衤<EFBFBD><EFBFBD>∟䌊<EFBFBD><EFBFBD><EFBFBD></param>
<param name="handler">鈭见𦛚雿<EFBFBD> () => {}</param>
</member>
<member name="M:IFreeSql.Transaction(System.Data.IsolationLevel,System.TimeSpan,System.Action)">
<summary>
<><E69298><EFBFBD><E887AD><EFBFBD>銝齿𣈲<E9BDBF><F0A388B2><EFBFBD>甇伐<E79487>
</summary>
<param name="isolationLevel"></param>
<param name="handler">鈭见𦛚雿<EFBFBD> () => {}</param>
<param name="timeout"><EFBFBD>𧒄嚗峕𧊋<EFBFBD><EFBFBD>摰峕<EFBFBD><EFBFBD><EFBFBD><EFBFBD>鋡怠<EFBFBD>隞𣇉瑪蝔衤<EFBFBD><EFBFBD>∟䌊<EFBFBD><EFBFBD><EFBFBD></param>
</member>
<member name="P:IFreeSql.Ado">
<summary>
<20>唳旿摨栞挪<E6A09E>桀笆鞊<E7AC86>
</summary>
</member>
<member name="P:IFreeSql.Aop">
<summary>
<20><><EFBFBD>㗇㜃<E39787>芣䲮瘜閖<E7989C><E99696><EFBFBD><E588BB><EFBFBD>
</summary>
</member>
<member name="P:IFreeSql.CodeFirst">
<summary>
CodeFirst 璅<E79285><EFBFBD><E69298>𤑳㮾<F0A491B3>單䲮瘜<E4B2AE>
</summary>
</member>
<member name="P:IFreeSql.DbFirst">
<summary>
DbFirst 璅<E79285><EFBFBD><E69298>𤑳㮾<F0A491B3>單䲮瘜<E4B2AE>
</summary>
</member>
<member name="P:IFreeSql.GlobalFilter">
<summary>
<20><EFBFBD><EFBFBD>誘霈曄蔭嚗<E894AD>虾暺䁅恕<E48185><E68195><EFBFBD><EFBFBD> Select/Update/Delete <20>∩辣
</summary>
</member>
</members>
</doc>

View File

@@ -105,7 +105,7 @@ namespace FreeSql.Internal.CommonProvider
{ {
if (indexes == null) if (indexes == null)
{ {
var sbflag = new StringBuilder().Append("query"); var sbflag = new StringBuilder().Append("adoQuery");
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
for (var a = 0; a < dr.FieldCount; a++) for (var a = 0; a < dr.FieldCount; a++)
{ {
@@ -148,7 +148,7 @@ namespace FreeSql.Internal.CommonProvider
case 0: case 0:
if (indexes1 == null) if (indexes1 == null)
{ {
var sbflag = new StringBuilder().Append("query"); var sbflag = new StringBuilder().Append("adoQuery");
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
for (var a = 0; a < dr.FieldCount; a++) for (var a = 0; a < dr.FieldCount; a++)
{ {
@@ -165,7 +165,7 @@ namespace FreeSql.Internal.CommonProvider
case 1: case 1:
if (indexes2 == null) if (indexes2 == null)
{ {
var sbflag = new StringBuilder().Append("query"); var sbflag = new StringBuilder().Append("adoQuery");
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
for (var a = 0; a < dr.FieldCount; a++) for (var a = 0; a < dr.FieldCount; a++)
{ {
@@ -216,7 +216,7 @@ namespace FreeSql.Internal.CommonProvider
case 0: case 0:
if (indexes1 == null) if (indexes1 == null)
{ {
var sbflag = new StringBuilder().Append("query"); var sbflag = new StringBuilder().Append("adoQuery");
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
for (var a = 0; a < dr.FieldCount; a++) for (var a = 0; a < dr.FieldCount; a++)
{ {
@@ -233,7 +233,7 @@ namespace FreeSql.Internal.CommonProvider
case 1: case 1:
if (indexes2 == null) if (indexes2 == null)
{ {
var sbflag = new StringBuilder().Append("query"); var sbflag = new StringBuilder().Append("adoQuery");
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
for (var a = 0; a < dr.FieldCount; a++) for (var a = 0; a < dr.FieldCount; a++)
{ {
@@ -250,7 +250,7 @@ namespace FreeSql.Internal.CommonProvider
case 2: case 2:
if (indexes3 == null) if (indexes3 == null)
{ {
var sbflag = new StringBuilder().Append("query"); var sbflag = new StringBuilder().Append("adoQuery");
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
for (var a = 0; a < dr.FieldCount; a++) for (var a = 0; a < dr.FieldCount; a++)
{ {
@@ -307,7 +307,7 @@ namespace FreeSql.Internal.CommonProvider
case 0: case 0:
if (indexes1 == null) if (indexes1 == null)
{ {
var sbflag = new StringBuilder().Append("query"); var sbflag = new StringBuilder().Append("adoQuery");
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
for (var a = 0; a < dr.FieldCount; a++) for (var a = 0; a < dr.FieldCount; a++)
{ {
@@ -324,7 +324,7 @@ namespace FreeSql.Internal.CommonProvider
case 1: case 1:
if (indexes2 == null) if (indexes2 == null)
{ {
var sbflag = new StringBuilder().Append("query"); var sbflag = new StringBuilder().Append("adoQuery");
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
for (var a = 0; a < dr.FieldCount; a++) for (var a = 0; a < dr.FieldCount; a++)
{ {
@@ -341,7 +341,7 @@ namespace FreeSql.Internal.CommonProvider
case 2: case 2:
if (indexes3 == null) if (indexes3 == null)
{ {
var sbflag = new StringBuilder().Append("query"); var sbflag = new StringBuilder().Append("adoQuery");
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
for (var a = 0; a < dr.FieldCount; a++) for (var a = 0; a < dr.FieldCount; a++)
{ {
@@ -358,7 +358,7 @@ namespace FreeSql.Internal.CommonProvider
case 3: case 3:
if (indexes4 == null) if (indexes4 == null)
{ {
var sbflag = new StringBuilder().Append("query"); var sbflag = new StringBuilder().Append("adoQuery");
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
for (var a = 0; a < dr.FieldCount; a++) for (var a = 0; a < dr.FieldCount; a++)
{ {
@@ -421,7 +421,7 @@ namespace FreeSql.Internal.CommonProvider
case 0: case 0:
if (indexes1 == null) if (indexes1 == null)
{ {
var sbflag = new StringBuilder().Append("query"); var sbflag = new StringBuilder().Append("adoQuery");
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
for (var a = 0; a < dr.FieldCount; a++) for (var a = 0; a < dr.FieldCount; a++)
{ {
@@ -438,7 +438,7 @@ namespace FreeSql.Internal.CommonProvider
case 1: case 1:
if (indexes2 == null) if (indexes2 == null)
{ {
var sbflag = new StringBuilder().Append("query"); var sbflag = new StringBuilder().Append("adoQuery");
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
for (var a = 0; a < dr.FieldCount; a++) for (var a = 0; a < dr.FieldCount; a++)
{ {
@@ -455,7 +455,7 @@ namespace FreeSql.Internal.CommonProvider
case 2: case 2:
if (indexes3 == null) if (indexes3 == null)
{ {
var sbflag = new StringBuilder().Append("query"); var sbflag = new StringBuilder().Append("adoQuery");
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
for (var a = 0; a < dr.FieldCount; a++) for (var a = 0; a < dr.FieldCount; a++)
{ {
@@ -472,7 +472,7 @@ namespace FreeSql.Internal.CommonProvider
case 3: case 3:
if (indexes4 == null) if (indexes4 == null)
{ {
var sbflag = new StringBuilder().Append("query"); var sbflag = new StringBuilder().Append("adoQuery");
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
for (var a = 0; a < dr.FieldCount; a++) for (var a = 0; a < dr.FieldCount; a++)
{ {
@@ -489,7 +489,7 @@ namespace FreeSql.Internal.CommonProvider
case 4: case 4:
if (indexes5 == null) if (indexes5 == null)
{ {
var sbflag = new StringBuilder().Append("query"); var sbflag = new StringBuilder().Append("adoQuery");
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
for (var a = 0; a < dr.FieldCount; a++) for (var a = 0; a < dr.FieldCount; a++)
{ {

View File

@@ -31,7 +31,7 @@ namespace FreeSql.Internal.CommonProvider
{ {
if (indexes == null) if (indexes == null)
{ {
var sbflag = new StringBuilder().Append("query"); var sbflag = new StringBuilder().Append("adoQuery");
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
for (var a = 0; a < dr.FieldCount; a++) for (var a = 0; a < dr.FieldCount; a++)
{ {
@@ -75,7 +75,7 @@ namespace FreeSql.Internal.CommonProvider
case 0: case 0:
if (indexes1 == null) if (indexes1 == null)
{ {
var sbflag = new StringBuilder().Append("QueryAsync"); var sbflag = new StringBuilder().Append("adoQuery");
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
for (var a = 0; a < dr.FieldCount; a++) for (var a = 0; a < dr.FieldCount; a++)
{ {
@@ -92,7 +92,7 @@ namespace FreeSql.Internal.CommonProvider
case 1: case 1:
if (indexes2 == null) if (indexes2 == null)
{ {
var sbflag = new StringBuilder().Append("QueryAsync"); var sbflag = new StringBuilder().Append("adoQuery");
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
for (var a = 0; a < dr.FieldCount; a++) for (var a = 0; a < dr.FieldCount; a++)
{ {
@@ -144,7 +144,7 @@ namespace FreeSql.Internal.CommonProvider
case 0: case 0:
if (indexes1 == null) if (indexes1 == null)
{ {
var sbflag = new StringBuilder().Append("QueryAsync"); var sbflag = new StringBuilder().Append("adoQuery");
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
for (var a = 0; a < dr.FieldCount; a++) for (var a = 0; a < dr.FieldCount; a++)
{ {
@@ -161,7 +161,7 @@ namespace FreeSql.Internal.CommonProvider
case 1: case 1:
if (indexes2 == null) if (indexes2 == null)
{ {
var sbflag = new StringBuilder().Append("QueryAsync"); var sbflag = new StringBuilder().Append("adoQuery");
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
for (var a = 0; a < dr.FieldCount; a++) for (var a = 0; a < dr.FieldCount; a++)
{ {
@@ -178,7 +178,7 @@ namespace FreeSql.Internal.CommonProvider
case 2: case 2:
if (indexes3 == null) if (indexes3 == null)
{ {
var sbflag = new StringBuilder().Append("QueryAsync"); var sbflag = new StringBuilder().Append("adoQuery");
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
for (var a = 0; a < dr.FieldCount; a++) for (var a = 0; a < dr.FieldCount; a++)
{ {
@@ -236,7 +236,7 @@ namespace FreeSql.Internal.CommonProvider
case 0: case 0:
if (indexes1 == null) if (indexes1 == null)
{ {
var sbflag = new StringBuilder().Append("QueryAsync"); var sbflag = new StringBuilder().Append("adoQuery");
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
for (var a = 0; a < dr.FieldCount; a++) for (var a = 0; a < dr.FieldCount; a++)
{ {
@@ -253,7 +253,7 @@ namespace FreeSql.Internal.CommonProvider
case 1: case 1:
if (indexes2 == null) if (indexes2 == null)
{ {
var sbflag = new StringBuilder().Append("QueryAsync"); var sbflag = new StringBuilder().Append("adoQuery");
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
for (var a = 0; a < dr.FieldCount; a++) for (var a = 0; a < dr.FieldCount; a++)
{ {
@@ -270,7 +270,7 @@ namespace FreeSql.Internal.CommonProvider
case 2: case 2:
if (indexes3 == null) if (indexes3 == null)
{ {
var sbflag = new StringBuilder().Append("QueryAsync"); var sbflag = new StringBuilder().Append("adoQuery");
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
for (var a = 0; a < dr.FieldCount; a++) for (var a = 0; a < dr.FieldCount; a++)
{ {
@@ -287,7 +287,7 @@ namespace FreeSql.Internal.CommonProvider
case 3: case 3:
if (indexes4 == null) if (indexes4 == null)
{ {
var sbflag = new StringBuilder().Append("QueryAsync"); var sbflag = new StringBuilder().Append("adoQuery");
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
for (var a = 0; a < dr.FieldCount; a++) for (var a = 0; a < dr.FieldCount; a++)
{ {
@@ -351,7 +351,7 @@ namespace FreeSql.Internal.CommonProvider
case 0: case 0:
if (indexes1 == null) if (indexes1 == null)
{ {
var sbflag = new StringBuilder().Append("QueryAsync"); var sbflag = new StringBuilder().Append("adoQuery");
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
for (var a = 0; a < dr.FieldCount; a++) for (var a = 0; a < dr.FieldCount; a++)
{ {
@@ -368,7 +368,7 @@ namespace FreeSql.Internal.CommonProvider
case 1: case 1:
if (indexes2 == null) if (indexes2 == null)
{ {
var sbflag = new StringBuilder().Append("QueryAsync"); var sbflag = new StringBuilder().Append("adoQuery");
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
for (var a = 0; a < dr.FieldCount; a++) for (var a = 0; a < dr.FieldCount; a++)
{ {
@@ -385,7 +385,7 @@ namespace FreeSql.Internal.CommonProvider
case 2: case 2:
if (indexes3 == null) if (indexes3 == null)
{ {
var sbflag = new StringBuilder().Append("QueryAsync"); var sbflag = new StringBuilder().Append("adoQuery");
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
for (var a = 0; a < dr.FieldCount; a++) for (var a = 0; a < dr.FieldCount; a++)
{ {
@@ -402,7 +402,7 @@ namespace FreeSql.Internal.CommonProvider
case 3: case 3:
if (indexes4 == null) if (indexes4 == null)
{ {
var sbflag = new StringBuilder().Append("QueryAsync"); var sbflag = new StringBuilder().Append("adoQuery");
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
for (var a = 0; a < dr.FieldCount; a++) for (var a = 0; a < dr.FieldCount; a++)
{ {
@@ -419,7 +419,7 @@ namespace FreeSql.Internal.CommonProvider
case 4: case 4:
if (indexes5 == null) if (indexes5 == null)
{ {
var sbflag = new StringBuilder().Append("QueryAsync"); var sbflag = new StringBuilder().Append("adoQuery");
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
for (var a = 0; a < dr.FieldCount; a++) for (var a = 0; a < dr.FieldCount; a++)
{ {

View File

@@ -1495,7 +1495,8 @@ namespace FreeSql.Internal
//判断主键为空,则整个对象不读取 //判断主键为空,则整个对象不读取
//blockExp.Add(Expression.Assign(readpkvalExp, Expression.Call(rowExp, MethodDataReaderGetValue, dataIndexExp))); //blockExp.Add(Expression.Assign(readpkvalExp, Expression.Call(rowExp, MethodDataReaderGetValue, dataIndexExp)));
if (trycol?.Attribute.IsPrimary == true) if (flagStr.StartsWith("adoQuery") == false && //Ado.Query 的时候不作此判断
trycol?.Attribute.IsPrimary == true) //若主键值为 null则整行读取出来的对象为 null
{ {
ispkExp.Add( ispkExp.Add(
Expression.IfThen( Expression.IfThen(