mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 17:20:49 +08:00 
			
		
		
		
	## v0.3.24
- 增加 GroupBy 分页方法; - 修复 Insert 参数化命名 bug,当存在 Id Id2 时发生; - 优化 Insert/Delete/Update 对象执行完后清理数据,以备多次使用;
This commit is contained in:
		@@ -30,6 +30,14 @@ namespace FreeSql.Internal.CommonProvider {
 | 
			
		||||
			if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure<T1>();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		protected void ClearData() {
 | 
			
		||||
			_source.Clear();
 | 
			
		||||
			_where.Clear();
 | 
			
		||||
			_whereTimes = 0;
 | 
			
		||||
			_params.Clear();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		public IDelete<T1> WithTransaction(DbTransaction transaction) {
 | 
			
		||||
			_transaction = transaction;
 | 
			
		||||
			return this;
 | 
			
		||||
@@ -38,12 +46,16 @@ namespace FreeSql.Internal.CommonProvider {
 | 
			
		||||
		public int ExecuteAffrows() {
 | 
			
		||||
			var sql = this.ToSql();
 | 
			
		||||
			if (string.IsNullOrEmpty(sql)) return 0;
 | 
			
		||||
			return _orm.Ado.ExecuteNonQuery(_transaction, CommandType.Text, sql, _params.ToArray());
 | 
			
		||||
			var affrows = _orm.Ado.ExecuteNonQuery(_transaction, CommandType.Text, sql, _params.ToArray());
 | 
			
		||||
			this.ClearData();
 | 
			
		||||
			return affrows;
 | 
			
		||||
		}
 | 
			
		||||
		async public Task<int> ExecuteAffrowsAsync() {
 | 
			
		||||
			var sql = this.ToSql();
 | 
			
		||||
			if (string.IsNullOrEmpty(sql)) return 0;
 | 
			
		||||
			return await _orm.Ado.ExecuteNonQueryAsync(_transaction, CommandType.Text, sql, _params.ToArray());
 | 
			
		||||
			var affrows = await _orm.Ado.ExecuteNonQueryAsync(_transaction, CommandType.Text, sql, _params.ToArray());
 | 
			
		||||
			this.ClearData();
 | 
			
		||||
			return affrows;
 | 
			
		||||
		}
 | 
			
		||||
		public abstract List<T1> ExecuteDeleted();
 | 
			
		||||
		public abstract Task<List<T1>> ExecuteDeletedAsync();
 | 
			
		||||
 
 | 
			
		||||
@@ -32,6 +32,12 @@ namespace FreeSql.Internal.CommonProvider {
 | 
			
		||||
			if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure<T1>();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		protected void ClearData() {
 | 
			
		||||
			_source.Clear();
 | 
			
		||||
			_ignore.Clear();
 | 
			
		||||
			_params = null;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public IInsert<T1> WithTransaction(DbTransaction transaction) {
 | 
			
		||||
			_transaction = transaction;
 | 
			
		||||
			return this;
 | 
			
		||||
@@ -267,8 +273,16 @@ namespace FreeSql.Internal.CommonProvider {
 | 
			
		||||
		}
 | 
			
		||||
		#endregion
 | 
			
		||||
 | 
			
		||||
		internal int RawExecuteAffrows() => _orm.Ado.ExecuteNonQuery(_transaction, CommandType.Text, ToSql(), _params);
 | 
			
		||||
		internal Task<int> RawExecuteAffrowsAsync() => _orm.Ado.ExecuteNonQueryAsync(_transaction, CommandType.Text, ToSql(), _params);
 | 
			
		||||
		internal int RawExecuteAffrows() {
 | 
			
		||||
			var affrows = _orm.Ado.ExecuteNonQuery(_transaction, CommandType.Text, ToSql(), _params);
 | 
			
		||||
			this.ClearData();
 | 
			
		||||
			return affrows;
 | 
			
		||||
		}
 | 
			
		||||
		async internal Task<int> RawExecuteAffrowsAsync() {
 | 
			
		||||
			var affrows = await _orm.Ado.ExecuteNonQueryAsync(_transaction, CommandType.Text, ToSql(), _params);
 | 
			
		||||
			this.ClearData();
 | 
			
		||||
			return affrows;
 | 
			
		||||
		}
 | 
			
		||||
		internal abstract long RawExecuteIdentity();
 | 
			
		||||
		internal abstract Task<long> RawExecuteIdentityAsync();
 | 
			
		||||
		internal abstract List<T1> RawExecuteInserted();
 | 
			
		||||
@@ -331,8 +345,8 @@ namespace FreeSql.Internal.CommonProvider {
 | 
			
		||||
						if (_noneParameter)
 | 
			
		||||
							sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, col.CsType, val));
 | 
			
		||||
						else {
 | 
			
		||||
							sb.Append(_commonUtils.QuoteWriteParamter(col.CsType, _commonUtils.QuoteParamterName($"{col.CsName}{didx}")));
 | 
			
		||||
							_params[didx * colidx + colidx2] = _commonUtils.AppendParamter(null, $"{col.CsName}{didx}", col.CsType, val);
 | 
			
		||||
							sb.Append(_commonUtils.QuoteWriteParamter(col.CsType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}")));
 | 
			
		||||
							_params[didx * colidx + colidx2] = _commonUtils.AppendParamter(null, $"{col.CsName}_{didx}", col.CsType, val);
 | 
			
		||||
						}
 | 
			
		||||
						++colidx2;
 | 
			
		||||
					}
 | 
			
		||||
 
 | 
			
		||||
@@ -79,5 +79,25 @@ namespace FreeSql.Internal.CommonProvider {
 | 
			
		||||
			var method = _select.GetType().GetMethod("ToSql", new[] { typeof(string) });
 | 
			
		||||
			return method.Invoke(_select, new object[] { field.Length > 0 ? field.Remove(0, 2).ToString() : null }) as string;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public ISelectGrouping<T1> Skip(int offset) {
 | 
			
		||||
			var method = _select.GetType().GetMethod("Skip", new[] { typeof(int) });
 | 
			
		||||
			method.Invoke(_select, new object[] { offset });
 | 
			
		||||
			return this;
 | 
			
		||||
		}
 | 
			
		||||
		public ISelectGrouping<T1> Offset(int offset) => this.Skip(offset);
 | 
			
		||||
 | 
			
		||||
		public ISelectGrouping<T1> Limit(int limit) {
 | 
			
		||||
			var method = _select.GetType().GetMethod("Limit", new[] { typeof(int) });
 | 
			
		||||
			method.Invoke(_select, new object[] { limit });
 | 
			
		||||
			return this;
 | 
			
		||||
		}
 | 
			
		||||
		public ISelectGrouping<T1> Take(int limit) => this.Limit(limit);
 | 
			
		||||
 | 
			
		||||
		public ISelectGrouping<T1> Page(int pageIndex, int pageSize) {
 | 
			
		||||
			var method = _select.GetType().GetMethod("Page", new[] { typeof(int), typeof(int) });
 | 
			
		||||
			method.Invoke(_select, new object[] { pageIndex, pageSize });
 | 
			
		||||
			return this;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -35,6 +35,15 @@ namespace FreeSql.Internal.CommonProvider {
 | 
			
		||||
			if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure<T1>();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		protected void ClearData() {
 | 
			
		||||
			_source.Clear();
 | 
			
		||||
			_ignore.Clear();
 | 
			
		||||
			_where.Clear();
 | 
			
		||||
			_set.Clear();
 | 
			
		||||
			_params.Clear();
 | 
			
		||||
			_paramsSource.Clear();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public IUpdate<T1> WithTransaction(DbTransaction transaction) {
 | 
			
		||||
			_transaction = transaction;
 | 
			
		||||
			return this;
 | 
			
		||||
@@ -47,12 +56,16 @@ namespace FreeSql.Internal.CommonProvider {
 | 
			
		||||
		public int ExecuteAffrows() {
 | 
			
		||||
			var sql = this.ToSql();
 | 
			
		||||
			if (string.IsNullOrEmpty(sql)) return 0;
 | 
			
		||||
			return _orm.Ado.ExecuteNonQuery(_transaction, CommandType.Text, sql, _params.Concat(_paramsSource).ToArray());
 | 
			
		||||
			var affrows = _orm.Ado.ExecuteNonQuery(_transaction, CommandType.Text, sql, _params.Concat(_paramsSource).ToArray());
 | 
			
		||||
			this.ClearData();
 | 
			
		||||
			return affrows;
 | 
			
		||||
		}
 | 
			
		||||
		async public Task<int> ExecuteAffrowsAsync() {
 | 
			
		||||
			var sql = this.ToSql();
 | 
			
		||||
			if (string.IsNullOrEmpty(sql)) return 0;
 | 
			
		||||
			return await _orm.Ado.ExecuteNonQueryAsync(_transaction, CommandType.Text, sql, _params.Concat(_paramsSource).ToArray());
 | 
			
		||||
			var affrows = await _orm.Ado.ExecuteNonQueryAsync(_transaction, CommandType.Text, sql, _params.Concat(_paramsSource).ToArray());
 | 
			
		||||
			this.ClearData();
 | 
			
		||||
			return affrows;
 | 
			
		||||
		}
 | 
			
		||||
		public abstract List<T1> ExecuteUpdated();
 | 
			
		||||
		public abstract Task<List<T1>> ExecuteUpdatedAsync();
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user