/// <summary> /// 执行UPDATE操作 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="entity">实体对象</param> /// <param name="isUpdateByPrimaryKey">是否以主键作为条件进行更新</param> /// <param name="sqlConditionPart">WHERE部分的SQL,当isUpdateByPrimaryKey=false时有效</param> /// <param name="condition">条件对象</param> /// <param name="commandTimeout"></param> /// <returns></returns> public virtual Task <int> UpdateAsync <T>(T entity, bool isUpdateByPrimaryKey = true, string sqlConditionPart = null, object condition = null, int?commandTimeout = default(int?)) { if (entity == null) { throw new InvalidOperationException("The parameter entity should not null."); } if (!isUpdateByPrimaryKey && string.IsNullOrWhiteSpace(sqlConditionPart)) { throw new InvalidOperationException("The parameter sqlConditionPart should not null or empty when the parameter isUpdateByPrimaryKey is false."); } var meta = MapParser.GetMapMetaInfo(typeof(T)); var sql = SQLBuilder.BuildUpdateSql(meta, isUpdateByPrimaryKey, sqlConditionPart); LogDebug($"UpdateAsync generate SQL: {sql}"); if (isUpdateByPrimaryKey) { return(this.ExecuteAsync(sql, entity, commandTimeout)); } else { var param = CreateUpdateParameters(entity, condition, true); return(this.ExecuteAsync(sql, param, commandTimeout)); } }
/// <summary> /// 执行批量DELETE操作,只支持根据主键删除 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="conditions">条件对象集合</param> /// <param name="commandTimeout"></param> /// <returns></returns> public virtual Task <int> BatchDeleteAsync <T>(IEnumerable <object> conditions, int?commandTimeout = default(int?)) { var meta = MapParser.GetMapMetaInfo(typeof(T)); var sql = SQLBuilder.BuildDeleteSql(meta); LogDebug($"Delete generate SQL: {sql}"); return(this.ExecuteAsync(sql, conditions, commandTimeout)); }
/// <summary> /// 执行批量UPDATE操作,只支持根据主键更新 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="list">实体对象集合</param> /// <param name="commandTimeout"></param> /// <returns></returns> public virtual Task <int> BatchUpdateAsync <T>(IEnumerable <T> list, int?commandTimeout = default(int?)) { var meta = MapParser.GetMapMetaInfo(typeof(T)); var sql = SQLBuilder.BuildUpdateSql(meta); LogDebug($"Update generate SQL: {sql}"); return(this.ExecuteAsync(sql, list, commandTimeout)); }
/// <summary> /// 执行批量INSERT操作 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="list">实体对象集合</param> /// <param name="commandTimeout"></param> /// <returns></returns> public virtual int BatchInsert <T>(IEnumerable <T> list, int?commandTimeout = default(int?)) { var meta = MapParser.GetMapMetaInfo(typeof(T)); var sql = SQLBuilder.BuildInsertSql(meta, false); LogDebug($"BatchInsert generate SQL: {sql}"); return(this.Execute(sql, list, commandTimeout)); }
/// <summary> /// 执行INSERT操作 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="entity">实体对象</param> /// <param name="commandTimeout"></param> /// <returns></returns> public virtual Task <long> InsertAsync <T>(T entity, int?commandTimeout = default(int?)) { var meta = MapParser.GetMapMetaInfo(typeof(T)); var sql = SQLBuilder.BuildInsertSql(meta); LogDebug($"InsertAsync generate SQL: {sql}"); return(this.ExecuteScalarAsync <long>(sql, entity, commandTimeout)); }
/// <summary> /// 执行REPLACE操作 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="entity"></param> /// <param name="commandTimeout"></param> /// <returns></returns> public Task <int> ReplaceAsync <T>(T entity, int?commandTimeout = default(int?)) { var meta = MapParser.GetMapMetaInfo(typeof(T)); var sql = _SQLBuilder.BuildReplaceSql(meta); LogDebug($"ReplaceAsync generate SQL: {sql}"); return(this.ExecuteAsync(sql, entity, commandTimeout)); }
/// <summary> /// 单表查询 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="sqlConditionPart">WHERE部分的SQL</param> /// <param name="condition">条件对象</param> /// <param name="sqlOrderPart">ORDER部分的SQL</param> /// <param name="commandTimeout"></param> /// <returns></returns> public virtual Task <IEnumerable <T> > QuerySingleTableAsync <T>(string sqlConditionPart = null, object condition = null, string sqlOrderPart = null, int?commandTimeout = default(int?)) { var meta = MapParser.GetMapMetaInfo(typeof(T)); var sql = SQLBuilder.BuildSelectSql(meta, true, sqlConditionPart, sqlOrderPart); LogDebug($"QuerySingleTableAsync generate SQL: {sql}"); return(this.QueryAsync <T>(sql, condition, commandTimeout)); }
/// <summary> /// 执行DELETE操作 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="condition">条件对象</param> /// <param name="isDeleteByPrimaryKey">是否以主键作为条件进行删除</param> /// <param name="sqlConditionPart">WHERE部分的SQL,当isDeleteByPrimaryKey=false时有效</param> /// <param name="commandTimeout"></param> /// <returns></returns> public virtual Task <int> DeleteAsync <T>(object condition, bool isDeleteByPrimaryKey = true, string sqlConditionPart = null, int?commandTimeout = default(int?)) { if (!isDeleteByPrimaryKey && string.IsNullOrWhiteSpace(sqlConditionPart)) { throw new InvalidOperationException("The parameter sqlConditionPart should not null or empty when the parameter isDeleteByPrimaryKey is false."); } var meta = MapParser.GetMapMetaInfo(typeof(T)); var sql = SQLBuilder.BuildDeleteSql(meta, isDeleteByPrimaryKey, sqlConditionPart); LogDebug($"DeleteAsync generate SQL: {sql}"); return(this.ExecuteAsync(sql, condition, commandTimeout)); }