mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 09:15:27 +08:00 
			
		
		
		
	- 优化 UpdateDict 支持 .IsVersion 乐观锁设置;
This commit is contained in:
		@@ -486,12 +486,14 @@ namespace base_entity
 | 
				
			|||||||
            Dictionary<string, object> dic = new Dictionary<string, object>();
 | 
					            Dictionary<string, object> dic = new Dictionary<string, object>();
 | 
				
			||||||
            dic.Add("id", 1);
 | 
					            dic.Add("id", 1);
 | 
				
			||||||
            dic.Add("name", "xxxx");
 | 
					            dic.Add("name", "xxxx");
 | 
				
			||||||
 | 
					            dic.Add("rowVersion", 100);
 | 
				
			||||||
            var diclist = new List<Dictionary<string, object>>();
 | 
					            var diclist = new List<Dictionary<string, object>>();
 | 
				
			||||||
            diclist.Add(dic);
 | 
					            diclist.Add(dic);
 | 
				
			||||||
            diclist.Add(new Dictionary<string, object>
 | 
					            diclist.Add(new Dictionary<string, object>
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                ["id"] = 2,
 | 
					                ["id"] = 2,
 | 
				
			||||||
                ["name"] = "123,1234,123444"
 | 
					                ["name"] = "123,1234,123444",
 | 
				
			||||||
 | 
					                ["rowVersion"] = 1
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var sqss = fsql.InsertDict(dic).AsTable("table1").ToSql();
 | 
					            var sqss = fsql.InsertDict(dic).AsTable("table1").ToSql();
 | 
				
			||||||
@@ -506,6 +508,11 @@ namespace base_entity
 | 
				
			|||||||
            var sqlupd11 = fsql.UpdateDict(dic).AsTable("table1").WherePrimary("id").NoneParameter(false).ToSql();
 | 
					            var sqlupd11 = fsql.UpdateDict(dic).AsTable("table1").WherePrimary("id").NoneParameter(false).ToSql();
 | 
				
			||||||
            var sqlupd22 = fsql.UpdateDict(diclist).AsTable("table1").WherePrimary("id").NoneParameter(false).ToSql();
 | 
					            var sqlupd22 = fsql.UpdateDict(diclist).AsTable("table1").WherePrimary("id").NoneParameter(false).ToSql();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var sqlupd111 = fsql.UpdateDict(dic).AsTable("table1").WherePrimary("id").IsVersion("rowVersion").NoneParameter(false).ToSql();
 | 
				
			||||||
 | 
					            var sqlupd221 = fsql.UpdateDict(diclist).AsTable("table1").WherePrimary("id").IsVersion("rowVersion").NoneParameter(false).ToSql();
 | 
				
			||||||
 | 
					            //fsql.UpdateDict(dic).AsTable("table1").WherePrimary("id").IsVersion("rowVersion").NoneParameter(false).ExecuteAffrows();
 | 
				
			||||||
 | 
					            //fsql.UpdateDict(diclist).AsTable("table1").WherePrimary("id").IsVersion("rowVersion").NoneParameter(false).ExecuteAffrows();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var sqldel1 = fsql.DeleteDict(dic).AsTable("table1").ToSql();
 | 
					            var sqldel1 = fsql.DeleteDict(dic).AsTable("table1").ToSql();
 | 
				
			||||||
            var sqldel2 = fsql.DeleteDict(diclist).AsTable("table1").ToSql();
 | 
					            var sqldel2 = fsql.DeleteDict(diclist).AsTable("table1").ToSql();
 | 
				
			||||||
            diclist[1]["title"] = "newtitle";
 | 
					            diclist[1]["title"] = "newtitle";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -800,14 +800,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>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1077,6 +1077,18 @@ SELECT ");
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            table.Primarys = table.Columns.Where(a => a.Value.Attribute.IsPrimary).Select(a => a.Value).ToArray();
 | 
					            table.Primarys = table.Columns.Where(a => a.Value.Attribute.IsPrimary).Select(a => a.Value).ToArray();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        public UpdateDictImpl IsVersion(string version)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (_updateProvider._table.ColumnsByCs.TryGetValue(version, out var col) == false)
 | 
				
			||||||
 | 
					                throw new Exception(CoreStrings.GetPrimarys_ParameterError_IsNotDictKey(version).Replace(nameof(GetPrimarys), ""));
 | 
				
			||||||
 | 
					            //if (col.Attribute.MapType.IsNullableType() ||
 | 
				
			||||||
 | 
					            //    col.Attribute.MapType.IsNumberType() == false && !new[] { typeof(byte[]), typeof(string) }.Contains(col.Attribute.MapType))
 | 
				
			||||||
 | 
					            //    throw new Exception(CoreStrings.Properties_AsRowLock_Must_Numeric_Byte(col.CsName));
 | 
				
			||||||
 | 
					            col.Attribute.IsVersion = true;
 | 
				
			||||||
 | 
					            _updateProvider._table.VersionColumn = col;
 | 
				
			||||||
 | 
					            _updateProvider._versionColumn = col;
 | 
				
			||||||
 | 
					            return this;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public UpdateDictImpl AsTable(string tableName)
 | 
					        public UpdateDictImpl AsTable(string tableName)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3349,6 +3349,177 @@
 | 
				
			|||||||
            <param name="parms"></param>
 | 
					            <param name="parms"></param>
 | 
				
			||||||
            <returns></returns>
 | 
					            <returns></returns>
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.ExecuteConnectTestAsync(System.Int32,System.Threading.CancellationToken)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            测试数据库是否连接正确,本方法执行如下命令:<para></para>
 | 
				
			||||||
 | 
					            MySql/SqlServer/PostgreSQL/达梦/人大金仓/神通: SELECT 1<para></para>
 | 
				
			||||||
 | 
					            Oracle: SELECT 1 FROM dual<para></para>
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="commandTimeout">命令超时设置(秒)</param>
 | 
				
			||||||
 | 
					            <param name="cancellationToken"></param>
 | 
				
			||||||
 | 
					            <returns>true: 成功, false: 失败</returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.ExecuteReaderAsync(System.Func{FreeSql.Internal.Model.FetchCallbackArgs{System.Data.Common.DbDataReader},System.Threading.Tasks.Task},System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="readerHander"></param>
 | 
				
			||||||
 | 
					            <param name="cmdType"></param>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="cmdParms"></param>
 | 
				
			||||||
 | 
					            <param name="cancellationToken"></param>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.ExecuteReaderAsync(System.Func{FreeSql.Internal.Model.FetchCallbackArgs{System.Data.Common.DbDataReader},System.Threading.Tasks.Task},System.String,System.Object,System.Threading.CancellationToken)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            查询,ExecuteReaderAsync(dr => {}, "select * from user where age > @age", new { age = 25 })<para></para>
 | 
				
			||||||
 | 
					            提示:parms 参数还可以传 Dictionary<string, object>
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="readerHander"></param>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="parms"></param>
 | 
				
			||||||
 | 
					            <param name="cancellationToken"></param>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.ExecuteArrayAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            查询
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="cmdType"></param>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="cmdParms"></param>
 | 
				
			||||||
 | 
					            <param name="cancellationToken"></param>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.ExecuteArrayAsync(System.String,System.Object,System.Threading.CancellationToken)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            查询,ExecuteArrayAsync("select * from user where age > @age", new { age = 25 })<para></para>
 | 
				
			||||||
 | 
					            提示:parms 参数还可以传 Dictionary<string, object>
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="parms"></param>
 | 
				
			||||||
 | 
					            <param name="cancellationToken"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.ExecuteDataSetAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            查询
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="cmdType"></param>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="cmdParms"></param>
 | 
				
			||||||
 | 
					            <param name="cancellationToken"></param>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.ExecuteDataSetAsync(System.String,System.Object,System.Threading.CancellationToken)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            查询,ExecuteDataSetAsync("select * from user where age > @age; select 2", new { age = 25 })<para></para>
 | 
				
			||||||
 | 
					            提示:parms 参数还可以传 Dictionary<string, object>
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="parms"></param>
 | 
				
			||||||
 | 
					            <param name="cancellationToken"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.ExecuteDataTableAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            查询
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="cmdType"></param>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="cmdParms"></param>
 | 
				
			||||||
 | 
					            <param name="cancellationToken"></param>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.ExecuteDataTableAsync(System.String,System.Object,System.Threading.CancellationToken)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            查询,ExecuteDataTableAsync("select * from user where age > @age", new { age = 25 })<para></para>
 | 
				
			||||||
 | 
					            提示:parms 参数还可以传 Dictionary<string, object>
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="parms"></param>
 | 
				
			||||||
 | 
					            <param name="cancellationToken"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.ExecuteNonQueryAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            在【主库】执行
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="cmdType"></param>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="cmdParms"></param>
 | 
				
			||||||
 | 
					            <param name="cancellationToken"></param>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.ExecuteNonQueryAsync(System.String,System.Object,System.Threading.CancellationToken)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            在【主库】执行,ExecuteNonQueryAsync("delete from user where age > @age", new { age = 25 })<para></para>
 | 
				
			||||||
 | 
					            提示:parms 参数还可以传 Dictionary<string, object>
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="parms"></param>
 | 
				
			||||||
 | 
					            <param name="cancellationToken"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.ExecuteScalarAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            在【主库】执行
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="cmdType"></param>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="cmdParms"></param>
 | 
				
			||||||
 | 
					            <param name="cancellationToken"></param>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.ExecuteScalarAsync(System.String,System.Object,System.Threading.CancellationToken)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            在【主库】执行,ExecuteScalarAsync("select 1 from user where age > @age", new { age = 25 })<para></para>
 | 
				
			||||||
 | 
					            提示:parms 参数还可以传 Dictionary<string, object>
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="parms"></param>
 | 
				
			||||||
 | 
					            <param name="cancellationToken"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.QueryAsync``1(System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            执行SQL返回对象集合,QueryAsync<User>("select * from user where age > @age", new SqlParameter { ParameterName = "age", Value = 25 })
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <typeparam name="T"></typeparam>
 | 
				
			||||||
 | 
					            <param name="cmdType"></param>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="cmdParms"></param>
 | 
				
			||||||
 | 
					            <param name="cancellationToken"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.QueryAsync``1(System.String,System.Object,System.Threading.CancellationToken)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            执行SQL返回对象集合,QueryAsync<User>("select * from user where age > @age", new { age = 25 })<para></para>
 | 
				
			||||||
 | 
					            提示:parms 参数还可以传 Dictionary<string, object>
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <typeparam name="T"></typeparam>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="parms"></param>
 | 
				
			||||||
 | 
					            <param name="cancellationToken"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.QueryAsync``2(System.Data.CommandType,System.String,System.Data.Common.DbParameter[],System.Threading.CancellationToken)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            执行SQL返回对象集合,Query<User>("select * from user where age > @age; select * from address", new SqlParameter { ParameterName = "age", Value = 25 })
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <typeparam name="T1"></typeparam>
 | 
				
			||||||
 | 
					            <typeparam name="T2"></typeparam>
 | 
				
			||||||
 | 
					            <param name="cmdType"></param>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="cmdParms"></param>
 | 
				
			||||||
 | 
					            <param name="cancellationToken"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.QueryAsync``2(System.String,System.Object,System.Threading.CancellationToken)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            执行SQL返回对象集合,Query<User, Address>("select * from user where age > @age; select * from address", new { age = 25 })<para></para>
 | 
				
			||||||
 | 
					            提示:parms 参数还可以传 Dictionary<string, object>
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <typeparam name="T1"></typeparam>
 | 
				
			||||||
 | 
					            <typeparam name="T2"></typeparam>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="parms"></param>
 | 
				
			||||||
 | 
					            <param name="cancellationToken"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
        <member name="E:FreeSql.IAop.ParseExpression">
 | 
					        <member name="E:FreeSql.IAop.ParseExpression">
 | 
				
			||||||
            <summary>
 | 
					            <summary>
 | 
				
			||||||
            可自定义解析表达式
 | 
					            可自定义解析表达式
 | 
				
			||||||
@@ -4379,6 +4550,12 @@
 | 
				
			|||||||
            <param name="timeout">超时</param>
 | 
					            <param name="timeout">超时</param>
 | 
				
			||||||
            <returns></returns>
 | 
					            <returns></returns>
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.Internal.ObjectPool.IObjectPool`1.GetAsync">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            获取资源
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
        <member name="M:FreeSql.Internal.ObjectPool.IObjectPool`1.Return(FreeSql.Internal.ObjectPool.Object{`0},System.Boolean)">
 | 
					        <member name="M:FreeSql.Internal.ObjectPool.IObjectPool`1.Return(FreeSql.Internal.ObjectPool.Object{`0},System.Boolean)">
 | 
				
			||||||
            <summary>
 | 
					            <summary>
 | 
				
			||||||
            使用完毕后,归还资源
 | 
					            使用完毕后,归还资源
 | 
				
			||||||
@@ -4454,6 +4631,12 @@
 | 
				
			|||||||
            </summary>
 | 
					            </summary>
 | 
				
			||||||
            <param name="obj">资源对象</param>
 | 
					            <param name="obj">资源对象</param>
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.Internal.ObjectPool.IPolicy`1.OnGetAsync(FreeSql.Internal.ObjectPool.Object{`0})">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            从对象池获取对象成功的时候触发,通过该方法统计或初始化对象
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="obj">资源对象</param>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
        <member name="M:FreeSql.Internal.ObjectPool.IPolicy`1.OnReturn(FreeSql.Internal.ObjectPool.Object{`0})">
 | 
					        <member name="M:FreeSql.Internal.ObjectPool.IPolicy`1.OnReturn(FreeSql.Internal.ObjectPool.Object{`0})">
 | 
				
			||||||
            <summary>
 | 
					            <summary>
 | 
				
			||||||
            归还对象给对象池的时候触发
 | 
					            归还对象给对象池的时候触发
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -138,6 +138,23 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
                    throw new DbUpdateVersionException(CoreStrings.DbUpdateVersionException_RowLevelOptimisticLock(_source.Count, affrows), _table, sql, dbParms, affrows, _source.Select(a => (object)a));
 | 
					                    throw new DbUpdateVersionException(CoreStrings.DbUpdateVersionException_RowLevelOptimisticLock(_source.Count, affrows), _table, sql, dbParms, affrows, _source.Select(a => (object)a));
 | 
				
			||||||
                foreach (var d in _source)
 | 
					                foreach (var d in _source)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
 | 
					                    if (d is Dictionary<string, object> dict)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        if (dict.ContainsKey(_versionColumn.CsName))
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            var val = dict[_versionColumn.CsName];
 | 
				
			||||||
 | 
					                            if (val == null) continue;
 | 
				
			||||||
 | 
					                            var valType = val.GetType();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                            if (valType == typeof(byte[]))
 | 
				
			||||||
 | 
					                                dict[_versionColumn.CsName] = _updateVersionValue;
 | 
				
			||||||
 | 
					                            else if (valType == typeof(string))
 | 
				
			||||||
 | 
					                                dict[_versionColumn.CsName] = _updateVersionValue;
 | 
				
			||||||
 | 
					                            else if (int.TryParse(string.Concat(val), out var tryintver))
 | 
				
			||||||
 | 
					                                dict[_versionColumn.CsName] = tryintver + 1;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                        continue;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                    if (_versionColumn.Attribute.MapType == typeof(byte[]))
 | 
					                    if (_versionColumn.Attribute.MapType == typeof(byte[]))
 | 
				
			||||||
                        _orm.SetEntityValueWithPropertyName(_table.Type, d, _versionColumn.CsName, _updateVersionValue);
 | 
					                        _orm.SetEntityValueWithPropertyName(_table.Type, d, _versionColumn.CsName, _updateVersionValue);
 | 
				
			||||||
                    else if (_versionColumn.Attribute.MapType == typeof(string))
 | 
					                    else if (_versionColumn.Attribute.MapType == typeof(string))
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user