internal static string GetUpdateCommandText(string key, DbEntity dbEntity, IEnumerable <ColumnField> fields)
        {
            ThrowIfNoColumns(fields);

            var columns = fields.SelectList(field => field.Name);

            columns.Add("IsActive");
            DbConst.InsertProperties.Each(column => columns.Remove(column));

            var primaryKeys = dbEntity.PrimaryKeys.Split(',');

            primaryKeys.Each(primaryKey => columns.Remove(primaryKey));

            var builder = new StringBuilder(string.Format("UPDATE {0}.{1} SET ", dbEntity.Schema, dbEntity.Name));

            builder.Append(string.Join(",", columns.Select(column => string.Format("[{0}]=@{0}", column))).Replace("@IsActive", "1"));
            builder.Append(" WHERE ");
            builder.Append(string.Join(" AND ", primaryKeys.Select(primaryKey => string.Format("[{0}]=@{0}", primaryKey))));

            return(CacheCommandText(key, builder.ToString()));
        }
        internal static string GetValuesCommandText(string key, DbEntity dbEntity, string column, IEnumerable <string> fields, string[] conditions, string orderBy)
        {
            var builder = new StringBuilder();

            builder.AppendFormat("SELECT {0} FROM {1}.{2} ", column, dbEntity.Schema, dbEntity.Name);
            builder.Append(dbEntity.Type == DbEntityType.Table ? "WHERE IsActive=1 " : "WHERE 1=1 ");

            if (conditions != null && conditions.Length > 0)
            {
                builder.Append(string.Join(" ", conditions.Select(condition => $"AND {condition}")));
            }
            else
            {
                builder.Append(string.Join(" ", fields.Select(field => string.Format("AND [{0}]=@{0}", field))));
            }

            if (!string.IsNullOrEmpty(orderBy))
            {
                builder.Append(string.Format(" ORDER BY {0}", orderBy));
            }

            return(CacheCommandText(key, builder.ToString()));
        }
        internal static string GetMultiQueryCommandText(string key, DbEntity dbEntity, IEnumerable <ColumnField> fields, string[] conditions, string orderBy, bool activeOnly)
        {
            var builder = new StringBuilder();

            builder.AppendFormat("SELECT * FROM {0}.{1} ", dbEntity.Schema, dbEntity.Name);
            builder.Append(dbEntity.Type == DbEntityType.Table && activeOnly ? "WHERE IsActive=1 " : "WHERE 1=1 ");

            if (conditions != null && conditions.Length > 0)
            {
                builder.Append(string.Join(" ", conditions.Select(condition => $"AND {condition}")));
            }
            else
            {
                builder.Append(string.Join(" ", fields.Select(field => $"AND { BuildMultiQueryCondition(field)}")));
            }

            if (!string.IsNullOrEmpty(orderBy))
            {
                builder.Append(string.Format(" ORDER BY {0}", orderBy));
            }

            return(CacheCommandText(key, builder.ToString()));
        }
        internal static string GetSplitQueryCommandText(string tableName, string column, DbEntity dbEntity, IEnumerable <ColumnField> fields, string[] conditions, string orderBy, bool activeOnly)
        {
            var builder = new StringBuilder();

            builder.AppendFormat("SELECT T.* FROM {0} AS T ", dbEntity.FullName);
            builder.AppendFormat("INNER JOIN {0} AS S ", tableName);
            builder.AppendFormat("ON T.{0}=S.Item ", column);
            builder.AppendFormat(dbEntity.Type == DbEntityType.Table && activeOnly ? "WHERE T.IsActive=1 " : "WHERE 1=1 ");

            if (conditions != null && conditions.Length > 0)
            {
                builder.Append(string.Join(" ", conditions.Select(condition => $"AND T.{condition}")));
            }
            else
            {
                builder.Append(string.Join(" ", fields.Select(field => $"AND { BuildMultiQueryCondition("T", field)}")));
            }

            if (!string.IsNullOrEmpty(orderBy))
            {
                builder.Append(string.Format(" ORDER BY T.{0}", orderBy));
            }

            builder.AppendFormat(";DROP TABLE {0};", tableName);

            return(builder.ToString());
        }