/// <summary>
        /// 此处去掉主键,即插入操作不能操作id
        /// </summary>
        /// <param name="tuple"></param>
        /// <returns></returns>
        private String GetInsertSql(Tuple <List <String>, List <String> > tuple)
        {
            String        pk     = EntityTableMapper.GetPkColumn(typeof(T));
            StringBuilder colstr = new StringBuilder();
            StringBuilder valstr = new StringBuilder();
            List <String> cols   = tuple.Item1;
            List <String> props  = tuple.Item2;

            for (Int32 i = 0; i < cols.Count; i++)
            {
                //去掉主键
                if (cols[i] == pk)
                {
                    continue;
                }
                if (colstr.Length != 0)
                {
                    colstr.Append(",");
                    valstr.Append(",");
                }
                colstr.Append(cols[i]);
                valstr.Append($"@{props[i]}");
            }
            return($"({colstr.ToString()}) values ({valstr.ToString()})");
        }
Esempio n. 2
0
        protected override List <TableRowActionViewModel> BuildTableViewActions()
        {
            var actions = base.BuildTableViewActions();

            string searchQuery = GetHttpContextSearchQuery();
            int    pageNumber  = GetHttpContextPageNumber();
            string returnUrl   = UrlEncoder.Encode($"/admin/foods?p={pageNumber}&q={searchQuery}");
            string returnTitle = UrlEncoder.Encode("Foods");

            actions.Insert(1, EntityTableMapper.CreateAction(
                               "Upload Images",
                               MaterialDesignIcons.ImagePlus,
                               TableRowActionMethod.Get,
                               $"/admin/roots/public/upload-files/uploads/images/foods/{{0}}?returnUrl={returnUrl}&returnTitle={returnTitle}",
                               "[Id]"));

            actions.Insert(2, EntityTableMapper.CreateAction(
                               "Select From Gallery",
                               MaterialDesignIcons.ImageMove,
                               TableRowActionMethod.Get,
                               $"{this.ControllerRoute}{{0}}/gallery",
                               "[Id]"));

            return(actions);
        }
Esempio n. 3
0
        public virtual async Task <IActionResult> GetAll(
            [FromQuery] int page           = 1,
            [FromQuery] string searchQuery = null,
            [FromQuery] string orderBy     = null,
            [FromQuery] string orderType   = null)
        {
            PaginatedList <TEntityViewModel> entitiesResult = await this.GetAllEntitiesPaginatedAsync(
                page,
                searchQuery,
                this.InterceptOrderProperty(orderBy),
                orderType);

            TableViewViewModel model = new TableViewViewModel();

            model.SingleEntityName = StringFunctions.SplitWordsByCapitalLetters(typeof(TEntity).Name);
            model.Title            = model.SingleEntityName.ToPluralString();
            this.ViewData[BreadcrumbPageTitlePlaceholder] = model.Title;

            model.Table = EntityTableMapper.Map(entitiesResult, this.BuildTableViewActions()?.ToArray());
            model.Table.SetPaginationRedirection(this.AreaName, this.ControllerName, this.ActionName);
            this.ViewData.Add("SearchQuery", searchQuery);
            this.ViewData.Add("OrderProperties", this.GetOrderProperties());
            this.ViewData.Add("OrderBy", orderBy);
            this.ViewData.Add("OrderType", orderType);

            this.InitializeNavigationActions(this.BuildTableViewNavigationActions());

            return(this.GetAllView(model));
        }
        private String GetUpdateSql(Tuple <List <String>, List <String> > tuple)
        {
            String        pk     = EntityTableMapper.GetPkColumn(typeof(T));
            StringBuilder colstr = new StringBuilder();
            List <String> cols   = tuple.Item1;
            List <String> props  = tuple.Item2;

            for (Int32 i = 0; i < cols.Count; i++)
            {
                //去掉主键
                if (cols[i] == pk)
                {
                    continue;
                }
                if (colstr.Length != 0)
                {
                    colstr.Append(",");
                }
                // synctimes = synctimes+1 的形式便直接拼接
                //注意,此处在解析header时候,便是1:1的关系,如果是set中便是为空
                if (String.IsNullOrEmpty(props[i]))
                {
                    colstr.Append($" {cols[i]} ");
                }
                else
                {
                    colstr.Append($"{cols[i]} = @{props[i]}");
                }
            }
            return(colstr.ToString());
        }
Esempio n. 5
0
        /// <summary>
        /// 此处去掉主键,即插入操作不能操作id
        /// </summary>
        /// <param name="tuple"></param>
        /// <returns></returns>
        private String GetInsertSql(Tuple <List <String>, List <String> > tuple)
        {
            HashSet <String> isincrement = EntityTableMapper.Increment(typeof(T));
            StringBuilder    colstr      = new StringBuilder();
            StringBuilder    valstr      = new StringBuilder();
            List <String>    cols        = tuple.Item1;
            List <String>    props       = tuple.Item2;

            for (Int32 i = 0; i < cols.Count; i++)
            {
                //去掉自增键
                if (isincrement.Contains(cols[i]))
                {
                    continue;
                }
                if (colstr.Length != 0)
                {
                    colstr.Append(",");
                    valstr.Append(",");
                }
                colstr.Append(cols[i]);
                valstr.Append($"@{props[i]}");
            }
            return($"({colstr.ToString()}) values ({valstr.ToString()})");
        }
        private String ConditionConvert(ColumnRelevanceMapper column, bool isNull = false)
        {
            StringBuilder sb = new StringBuilder();

            //如果 null == item.id 的写法, 会解析成
            //column.ColumnName == null && column.SqlOperatorEnum == SqlOperatorEnum.None
            // null,那么就直接返回"", 接下来的  == item.id 会传递false,然后解析 item.id is null
            if (column.ColumnName == null && column.SqlOperatorEnum == SqlOperatorEnum.None)
            {
                return("");
            }
            //如果是 item.id == null 中写法 那么 == null 则返回 is null
            if (isNull || column.ColumnName == null)
            {
                column.SqlOperatorEnum = SqlEnumConvert(column.SqlOperatorEnum);
            }
            if (column.SqlOperatorEnum == SqlOperatorEnum.EqualNotNull ||
                column.SqlOperatorEnum == SqlOperatorEnum.EqualNull)
            {
                String str = "";
                if (!String.IsNullOrEmpty(column.ColumnName))
                {
                    Type   t          = column.TableName;
                    String tableName  = EntityTableMapper.GetTableName(t);
                    String columnName = EntityTableMapper.GetColoumName(t, column.ColumnName);
                    str = $"{tableName}.{columnName}";
                }
                return($"{str} {column.SqlOperatorEnum.GetOperator()}");
            }
            if (column.SqlOperatorEnum != SqlOperatorEnum.None)
            {
                sb.Append(column.SqlOperatorEnum.GetOperator());
            }
            //如果是 直接传递字符串 如 id in (select id from xxx)中,则 括号中则直接拼接,而不用@数字
            //如果是 item.id == 1 中的  == 1,那么只 保存 = @ColumnName
            if (column.TableName == null)
            {
                if (column.ColumnName.IndexOf("(") != -1)
                {
                    sb.Append($" {column.ColumnName} ");
                }
                else
                {
                    sb.Append($"@{column.ColumnName}");
                }
            }
            //如果是 item.id == 1 中的  item.id ,那么就保存 tablename.id
            else
            {
                Type   t          = column.TableName;
                String tableName  = EntityTableMapper.GetTableName(t);
                String columnName = EntityTableMapper.GetColoumName(t, column.ColumnName);
                sb.Append($" [{tableName}].[{columnName}] ");
            }
            return(sb.ToString());
        }
Esempio n. 7
0
        protected override List <TableRowActionViewModel> BuildTableViewActions()
        {
            var actions = base.BuildTableViewActions();

            actions.Insert(1, EntityTableMapper.CreateAction(
                               "Foods",
                               MaterialDesignIcons.FoodApple,
                               TableRowActionMethod.Get,
                               $"{this.ControllerRoute}{{0}}/foods",
                               "[Id]"));

            return(actions);
        }
Esempio n. 8
0
        private String ConditionConvert(ColumnRelevanceMapper column, bool isNull = false)
        {
            StringBuilder sb = new StringBuilder();

            //如果 null == item.id 中写法 null,那么返回"", == item.id 返回item.id is null
            //如果是 item.id == null 中写法 那么 == null 则返回 is null
            if (column.ColumnName == null && column.SqlOperatorEnum == SqlOperatorEnum.None)
            {
                return("");
            }
            if (isNull || column.ColumnName == null)
            {
                column.SqlOperatorEnum = SqlEnumConvert(column.SqlOperatorEnum);
            }
            if (column.SqlOperatorEnum == SqlOperatorEnum.EqualNotNull ||
                column.SqlOperatorEnum == SqlOperatorEnum.EqualNull)
            {
                String str = "";
                if (!String.IsNullOrEmpty(column.ColumnName))
                {
                    Type   t          = column.TableName;
                    String tableName  = EntityTableMapper.GetTableName(t);
                    String columnName = EntityTableMapper.GetColoumName(t, column.ColumnName);
                    str = $"{tableName}.{columnName}";
                }
                return($"{str} {column.SqlOperatorEnum.GetOperator()}");
            }
            if (column.SqlOperatorEnum != SqlOperatorEnum.None)
            {
                sb.Append(column.SqlOperatorEnum.GetOperator());
            }
            //如果是 item.id = 1 中的  = 1,那么只 保存 = @ColumnName
            if (column.TableName == null)
            {
                sb.Append($"@{column.ColumnName}");
            }
            else
            {
                Type   t          = column.TableName;
                String tableName  = EntityTableMapper.GetTableName(t);
                String columnName = EntityTableMapper.GetColoumName(t, column.ColumnName);
                sb.Append($" {tableName}.{columnName} ");
            }
            return(sb.ToString());
        }
        public override IBatch End()
        {
            IBatch batch = new SqlServerBatch();
            Tuple <List <String>, List <String> > tuple = ConvertHeader(Reduce.GetHeader());
            Type                         t           = typeof(T);
            StringBuilder                sb          = new StringBuilder();
            TableRelevanceMapper         table       = Reduce.GetTable();
            List <ColumnRelevanceMapper> whereColumn = Reduce.GetWhere();

            sb.Append(table.TableOperatorEnum.GetOperator());
            sb.Append($" {EntityTableMapper.GetTableName(t)} ");
            switch (table.TableOperatorEnum)
            {
            case TableOperatorEnum.Insert:
                sb.Append(GetInsertSql(tuple));
                break;

            case TableOperatorEnum.Update:
                sb.Append(" set ");
                sb.Append(GetUpdateSql(tuple));
                if (whereColumn.Count == 0)
                {
                    SetNoneWhere(t);
                }
                break;

            case TableOperatorEnum.Delete:
                if (whereColumn.Count == 0)
                {
                    SetNoneWhere(t);
                }
                break;

            default:
                throw new Exception("请先选择操作种类");
            }
            String where = ConvertToWhere(whereColumn);
            if (!String.IsNullOrEmpty(where))
            {
                sb.Append($" where {where}");
            }
            batch.SqlBuilder        = sb.ToString();
            batch.DynamicParameters = Reduce.Parameters;
            return(batch);
        }
Esempio n. 10
0
        private void SetNoneWhere(Type t)
        {
            String pk = EntityTableMapper.GetPkColumn(t);

            if (String.IsNullOrEmpty(pk))
            {
                throw new ArgumentException("请使用带主键的或者添加删选条件");
            }
            String pkValue = ValuePairs[pk].ColumnName;
            ColumnRelevanceMapper column = new ColumnRelevanceMapper();

            column.ColumnName = pk;
            column.TableName  = t;
            ColumnRelevanceMapper value = new ColumnRelevanceMapper();

            value.ColumnName      = pk;
            value.SqlOperatorEnum = SqlOperatorEnum.Equal;
            Reduce.AddWhere(column);
            Reduce.AddWhere(value);
        }
Esempio n. 11
0
        private String ConvertToQuery(List <ColumnRelevanceMapper> query)
        {
            StringBuilder sb = new StringBuilder(256);

            foreach (var column in query)
            {
                if (sb.Length != 0)
                {
                    sb.Append(",");
                }
                if (column.TableName == null)
                {
                    sb.Append($" {column.ColumnName} ");
                    continue;
                }
                String tablename  = EntityTableMapper.GetTableName(column.TableName);
                String columnname = EntityTableMapper.GetColoumName(column.TableName, column.ColumnName);
                sb.Append($"{tablename}.{columnname}");
            }
            return(sb.ToString());
        }
Esempio n. 12
0
        /// <summary>
        /// Build the default table view actions.
        /// </summary>
        /// <returns></returns>
        protected virtual List <TableRowActionViewModel> BuildTableViewActions()
        {
            var actions = new List <TableRowActionViewModel>();

            if (this.HasDetails)
            {
                actions.Add(EntityTableMapper.DetailsAction($"{this.ControllerRoute}{{0}}", "[Id]"));
            }

            if (this.HasEdit)
            {
                actions.Add(EntityTableMapper.EditAction($"{this.ControllerRoute}{{0}}/edit", "[Id]"));
            }

            if (this.HasDelete)
            {
                actions.Add(EntityTableMapper.DeleteAction($"{this.ControllerRoute}{{0}}/delete", "[Id]"));
            }

            return(actions);
        }
Esempio n. 13
0
        private String ConvertToTable(List <TableRelevanceMapper> tables)
        {
            StringBuilder sb = new StringBuilder();

            foreach (var table in tables)
            {
                String tableName = EntityTableMapper.GetTableName(table.TableName);
                if (table.TableOperatorEnum == TableOperatorEnum.None)
                {
                    sb.Insert(0, tableName);
                }
                else
                {
                    String tableOperator = table.TableOperatorEnum.GetOperator();
                    sb.Append($" {tableOperator} {tableName} on ");
                    foreach (var on in table.ColumnOperator)
                    {
                        sb.Append($" {ConditionConvert(on)} ");
                    }
                }
            }
            return(sb.ToString());
        }