Beispiel #1
0
        /// <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));
            }
        }
Beispiel #2
0
        /// <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));
        }
Beispiel #3
0
        /// <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));
        }
Beispiel #4
0
        /// <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));
        }
Beispiel #5
0
        /// <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));
        }
Beispiel #6
0
        /// <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));
        }
Beispiel #7
0
        /// <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));
        }
Beispiel #8
0
        /// <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));
        }