Ejemplo n.º 1
0
        private bool innerBeginTransaction(string connectionString)
        {
            try
            {
                if (string.IsNullOrEmpty(connectionString))
                {
                    return(false);
                }
                if (TransConnection == null)
                {
                    TransConnection = new NpgsqlConnection(connectionString);
                }

                if (TransConnection == null)
                {
                    return(false);
                }
                if (TransConnection.State != ConnectionState.Open)
                {
                    TransConnection.Open();
                }
                Transaction = TransConnection.BeginTransaction();
                return(true);
            }
            catch (Exception ex)
            {
                var method = MethodBase.GetCurrentMethod();
                Logger?.LogError(ex, $"Error in: {method.Module.Name} {method.Name}");
                throw new DbDataException(ex, "");
            }
        }
Ejemplo n.º 2
0
        private bool innerBeginTransaction(string connectionString)
        {
            try
            {
                if (string.IsNullOrEmpty(connectionString))
                {
                    return(false);
                }
                if (TransConnection == null)
                {
                    TransConnection = new SqlConnection(connectionString);
                }

                if (TransConnection == null)
                {
                    return(false);
                }
                if (TransConnection.State != ConnectionState.Open)
                {
                    TransConnection.Open();
                }
                Transaction = TransConnection.BeginTransaction();
                return(true);
            }
            catch (Exception ex)
            {
                Logger?.LogError(ex, "Error at BeginTransaction");
                throw new DbDataException(ex, "");
            }
        }
Ejemplo n.º 3
0
        /// <summary> 还原历史版本 </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public async Task <TConfig> RecoveryAsync(string id)
        {
            //更新之前版本为历史版本
            const string updateSql = "UPDATE [t_config] SET [status]=1 WHERE [project_id]=@projectId AND [name]=@name AND [mode]=@mode AND [status]=0";

            return(await Transaction(async() =>
            {
                var history = await Connection.QueryByIdAsync <TConfig>(id);
                if (history == null || history.Status != (byte)ConfigStatus.History)
                {
                    throw new BusiException("历史版本不存在");
                }

                var count = await TransConnection.ExecuteAsync(Connection.FormatSql(updateSql), new
                {
                    projectId = history.ProjectId,
                    name = history.Name,
                    mode = history.Mode
                }, Trans);
                //更新状态
                history.Status = (byte)ConfigStatus.Normal;
                count += await TransConnection.UpdateAsync(history, new[] { nameof(TConfig.Status) }, Trans);
                return count > 0 ? history : null;
            }));
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Protected implementation of Dispose pattern.
        /// </summary>
        /// <param name="disposing">Disposed flag.</param>
        protected virtual void Dispose(bool disposing)
        {
            if (_disposed)
            {
                return;
            }

            if (disposing)
            {
                Connection?.Dispose();
                TransConnection?.Dispose();
            }

            _disposed = true;
        }
Ejemplo n.º 5
0
 private int innerExecute(string query, int timeout, bool inTransaction)
 {
     try
     {
         using (var cmd = inTransaction
             ? TransConnection.CreateCommand()
             : Connection.CreateCommand())
         {
             if (timeout != -1)
             {
                 if (timeout >= 0)
                 {
                     cmd.CommandTimeout = timeout;
                 }
                 else
                 {
                     throw new ArgumentException("Invalid CommandTimeout value", nameof(timeout));
                 }
             }
             cmd.CommandText = query;
             if (inTransaction)
             {
                 cmd.Transaction = Transaction;
             }
             else
             {
                 Connection.Open();
             }
             var rows = cmd.ExecuteNonQuery();
             return(rows);
         }
     }
     catch (Exception ex)
     {
         Logger?.LogError(ex, $"Error at Execute; command text: {query}");
         throw new DbDataException(ex, query);
     }
     finally
     {
         if (!inTransaction)
         {
             if (Connection.State == ConnectionState.Open)
             {
                 Connection.Close();
             }
         }
     }
 }
Ejemplo n.º 6
0
        /// <summary> 保存配置 </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public async Task <int> UpdateAsync(TConfig model)
        {
            model.Id        = IdentityHelper.Guid32;
            model.Timestamp = Clock.Now;
            model.Md5       = model.Content.Md5();
            var version = await QueryVersionAsync(model.ProjectId, model.Name, model.Mode);

            if (version != null && version == model.Md5)
            {
                throw new BusiException("配置未更改");
            }
            //更新之前版本为历史版本
            return(await UnitOfWork.Trans(async() =>
            {
                var count = await DeleteByModuleAsync(model.ProjectId, model.Name, model.Mode);
                count += await TransConnection.InsertAsync(model, trans: Trans);
                return count;
            }));
        }
Ejemplo n.º 7
0
 /// <inheritdoc />
 public void RollbackTransaction()
 {
     try
     {
         Transaction.Rollback();
         Transaction.Dispose();
         Transaction = null;
         if (TransConnection.State == ConnectionState.Open)
         {
             TransConnection.Close();
         }
         TransConnection.Dispose();
         TransConnection = null;
     }
     catch (Exception ex)
     {
         Logger?.LogError(ex, "Error at RollbackTransaction");
         throw new DbDataException(ex, "Error at RollbackTransaction");
     }
 }
Ejemplo n.º 8
0
        /// <summary> 删除配置 </summary>
        /// <param name="projectId"></param>
        /// <param name="module"></param>
        /// <param name="env"></param>
        /// <returns></returns>
        public async Task <int> DeleteByModuleAsync(string projectId, string module, string env)
        {
            //更新之前版本为历史版本
            SQL updateSql =
                "UPDATE [t_config] SET [status]=1 WHERE [project_id]=@projectId AND [name]=@name AND [status]=0";

            if (string.IsNullOrWhiteSpace(env))
            {
                updateSql += "AND [mode] IS NULL";
            }
            else
            {
                updateSql += "AND [mode]=@mode";
            }

            var sql = Connection.FormatSql(updateSql.ToString());

            return(await TransConnection.ExecuteAsync(sql, new { projectId, name = module, mode = env },
                                                      Trans));
        }
Ejemplo n.º 9
0
        /// <summary> 批量更新数据 </summary>
        /// <param name="models"></param>
        /// <param name="propExpression"></param>
        /// <returns></returns>
        public Task <int> UpdateAsync(IEnumerable <T> models, Expression <Func <T, object> > propExpression)
        {
            var props = propExpression.MemberNames()?.ToArray();

            return(TransConnection.UpdateAsync(models, props, Trans));
        }
Ejemplo n.º 10
0
 /// <summary> 更新数据 </summary>
 /// <param name="model"></param>
 /// <param name="props"></param>
 /// <returns></returns>
 public Task <int> UpdateAsync(T model, string[] props = null)
 {
     return(TransConnection.UpdateAsync(model, props, Trans));
 }
Ejemplo n.º 11
0
 /// <summary> 批量插入 </summary>
 /// <param name="models"></param>
 /// <param name="excepts"></param>
 /// <returns></returns>
 public int Insert(IEnumerable <T> models, string[] excepts = null)
 {
     return(TransConnection.Insert <T>(models, excepts, Trans));
 }
Ejemplo n.º 12
0
 /// <summary> 插入单条数据,不支持有自增列 </summary>
 /// <param name="model"></param>
 /// <param name="excepts">过滤项(如:自增ID)</param>
 /// <returns></returns>
 public int Insert(T model, string[] excepts = null)
 {
     return(TransConnection.Insert(model, excepts, Trans));
 }
Ejemplo n.º 13
0
 /// <summary> 删除 </summary>
 /// <param name="key"></param>
 /// <param name="keyColumn"></param>
 /// <returns></returns>
 public int Delete(object key, string keyColumn = null)
 {
     return(TransConnection.Delete <T>(key, keyColumn, Trans));
 }
Ejemplo n.º 14
0
 /// <summary> 批量更新 </summary>
 /// <param name="model"></param>
 /// <param name="props"></param>
 /// <returns></returns>
 public int Update(IEnumerable <T> models, string[] props = null)
 {
     return(TransConnection.Update(models, props, Trans));
 }
Ejemplo n.º 15
0
 /// <summary> 插入单条数据,不支持有自增列 </summary>
 /// <param name="model"></param>
 /// <param name="excepts">过滤项(如:自增ID)</param>
 /// <returns></returns>
 public Task <int> InsertAsync(T model, string[] excepts = null)
 {
     return(TransConnection.InsertAsync(model, excepts, Trans));
 }
Ejemplo n.º 16
0
 /// <summary> 批量插入 </summary>
 /// <param name="models"></param>
 /// <param name="excepts"></param>
 /// <returns></returns>
 public Task <int> InsertAsync(IEnumerable <T> models, string[] excepts = null)
 {
     return(TransConnection.InsertAsync(models, excepts, Trans));
 }
Ejemplo n.º 17
0
 /// <summary> 更新 </summary>
 /// <param name="model"></param>
 /// <param name="props"></param>
 /// <returns></returns>
 public int Update(T model, string[] props = null)
 {
     return(TransConnection.Update(model, props, Trans));
 }
Ejemplo n.º 18
0
 /// <summary> 批量更新数据 </summary>
 /// <param name="models"></param>
 /// <param name="props"></param>
 /// <returns></returns>
 public Task <int> UpdateAsync(IEnumerable <T> models, string[] props = null)
 {
     return(TransConnection.UpdateAsync(models, props, Trans));
 }
Ejemplo n.º 19
0
        /// <summary> 更新 </summary>
        /// <param name="model"></param>
        /// <param name="props"></param>
        /// <returns></returns>
        public int Update(T model, Expression <Func <T, object> > propExpression)
        {
            var props = propExpression.MemberNames()?.ToArray();

            return(TransConnection.Update(model, props, Trans));
        }
Ejemplo n.º 20
0
 /// <summary> 删除 </summary>
 /// <param name="key"></param>
 /// <param name="keyColumn"></param>
 /// <returns></returns>
 public Task <int> DeleteAsync(object key, string keyColumn = null)
 {
     return(TransConnection.DeleteAsync <T>(key, keyColumn, Trans));
 }
Ejemplo n.º 21
0
 public async Task <int> UpdateAsync(TAccount model)
 {
     return(await TransConnection.UpdateAsync(model, new[] { nameof(TAccount.Nick), nameof(TAccount.Avatar) }, Trans));
 }