Ejemplo n.º 1
0
        public ActionResult <ApiResult <TableModel <DbTableGridViewModel> > > GetTableList(int?dbId, [FromForm] DbTableViewModel model)
        {
            var result = new  ApiResult <TableModel <DbTableGridViewModel> >();

            result.Data = new TableModel <DbTableGridViewModel>();
            var db = GetTryDb(dbId.Value);

            result.Data.Rows = mapper.Map <List <DbTableGridViewModel> > (db.DbMaintenance.GetTableInfoList(false));
            var codetable = CodeTableDb.AsQueryable().Where(it => it.DbId == dbId.Value).OrderBy(it => it.TableName).ToList();

            foreach (var item in result.Data.Rows)
            {
                item.IsImport = codetable.Any(it => it.TableName.Equals(item.Name, StringComparison.CurrentCultureIgnoreCase)) ? "导入" : "";
            }
            if (!string.IsNullOrEmpty(model.name))
            {
                result.Data.Rows = result.Data.Rows.Where(it => it.Name.ToLower().Contains(model.name?.ToLower())).ToList();
            }
            if (model.typeId == "1")
            {
                result.Data.Rows = result.Data.Rows.Where(it => !string.IsNullOrEmpty(it.IsImport)).ToList();
            }
            if (model.typeId == "2")
            {
                result.Data.Rows = result.Data.Rows.Where(it => string.IsNullOrEmpty(it.IsImport)).ToList();
            }
            result.IsSuccess       = true;
            result.Data.PageNumber = 1;
            result.Data.PageSize   = result.Data.Rows.Count;
            return(result);
        }
Ejemplo n.º 2
0
        private DataTable [] Export(string model, SqlSugarClient tableDb)
        {
            var list    = Newtonsoft.Json.JsonConvert.DeserializeObject <List <CodeTableViewModel> >(model);
            var oldList = CodeTableDb.AsQueryable().In(list.Select(it => it.Id).ToList()).ToList();
            List <EntitiesGen> genList    = GetGenList(oldList, CodeTypeDb.GetList(), tableDb.CurrentConnectionConfig.DbType);
            List <DataTable>   datatables = new List <DataTable>();

            foreach (var item in genList)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("列名");
                dt.Columns.Add("列描述");
                dt.Columns.Add("列类型");
                dt.Columns.Add("实体类型");
                dt.Columns.Add("主键");
                dt.Columns.Add("自增");
                dt.Columns.Add("可空");
                dt.Columns.Add("长度");
                dt.Columns.Add("精度");
                dt.Columns.Add("默认值");
                dt.Columns.Add("表名");;
                dt.Columns.Add("表描述");
                foreach (var it in item.PropertyGens)
                {
                    var dr = dt.NewRow();
                    dr["列名"]   = it.DbColumnName;
                    dr["列描述"]  = it.Description;
                    dr["列类型"]  = it.DbType;
                    dr["实体类型"] = it.Type;
                    dr["表名"]   = item.TableName;;
                    dr["表描述"]  = item.Description;

                    dr["主键"]  = it.IsPrimaryKey?"是":"";
                    dr["自增"]  = it.IsIdentity ? "是" : "";
                    dr["可空"]  = it.IsNullable ? "是" : "";
                    dr["长度"]  = it.Length;
                    dr["精度"]  = it.DecimalDigits;
                    dr["默认值"] = it.DefaultValue;

                    dt.Rows.Add(dr);
                }
                dt.TableName = item.TableName;
                datatables.Add(dt);
            }
            return(datatables.ToArray());
        }
Ejemplo n.º 3
0
        private void UpdateEntityItem(int dbid, SqlSugarClient tableDb, List <CodeTableViewModel> list)
        {
            var oldList     = CodeTableDb.AsQueryable().In(list.Select(it => it.Id).ToList()).ToList();
            var oldColumns  = Db.Queryable <CodeColumns, CodeTable>((c, t) => c.CodeTableId == t.Id).Where((c, t) => oldList.Select(it => it.Id).Contains(t.Id)).Select((c, t) => new { TableId = t.Id, TableName = t.TableName, Columns = c }).ToList();
            var alltables   = tableDb.DbMaintenance.GetTableInfoList(false).Select(it => it.Name.ToLower()).ToList();
            var ids         = list.Select(it => it.Id).ToList();
            var tableNames  = list.Select(it => it.TableName.ToLower()).ToList();
            var errorTables = list.Where(it => !alltables.Contains(it.TableName.ToLower()) && !alltables.Contains(it.ClassName.ToLower())).ToList();

            base.Check(errorTables.Any(), string.Join(",", errorTables.Select(y => y.TableName ?? y.ClassName)) + "未创建表不能同步");
            try
            {
                Db.BeginTran();
                CodeTableDb.DeleteByIds(ids.Select(it => (object)it).ToArray());
                var dbTableGridList = tableDb.DbMaintenance.GetTableInfoList(false).Where(it => tableNames.Contains(it.Name.ToLower())).Select(it => new DbTableGridViewModel()
                {
                    Description = it.Description,
                    Name        = it.Name
                });
                if (dbTableGridList.Any())
                {
                    SaveCodetableImport(dbid, Newtonsoft.Json.JsonConvert.SerializeObject(dbTableGridList));
                }
                foreach (var item in oldList)
                {
                    CodeTableDb.AsUpdateable(item).UpdateColumns(it => it.ClassName).WhereColumns(it => it.TableName).ExecuteCommand();
                }
                List <CodeColumns> UpdateColumns = new List <CodeColumns>();
                foreach (var item in oldColumns.GroupBy(it => new { it.TableId, it.TableName }).ToList())
                {
                    var tableId = CodeTableDb.AsQueryable().Where(it => it.TableName == item.Key.TableName && it.DbId == dbid).First()?.Id;
                    if (tableId != null)
                    {
                        var columns = CodeColumnsDb.AsQueryable().Where(it => it.CodeTableId == tableId).ToList();
                        foreach (var col in columns)
                        {
                            var addColumn = item.FirstOrDefault(it => it.Columns.DbColumnName == col.DbColumnName);
                            if (addColumn != null)
                            {
                                col.ClassProperName = addColumn.Columns.ClassProperName;
                                UpdateColumns.Add(col);
                            }
                            else
                            {
                            }
                        }
                        foreach (var oldItem in item.ToList())
                        {
                            if (oldItem.Columns.CodeType.Equals("ignore", StringComparison.CurrentCultureIgnoreCase))
                            {
                                var mapp = _mapper.Map <CodeColumns>(oldItem.Columns);
                                mapp.CodeTableId = columns[0].CodeTableId;
                                CodeColumnsDb.AsInsertable(mapp).ExecuteCommand();
                            }
                        }
                    }
                }
                CodeColumnsDb.AsUpdateable(UpdateColumns).UpdateColumns(it => it.ClassProperName).ExecuteCommand();
                Db.CommitTran();
            }
            catch (Exception ex)
            {
                Db.RollbackTran();
                throw ex;
            }
        }
Ejemplo n.º 4
0
        public ActionResult <ApiResult <bool> > CreateTables([FromForm] string model, [FromForm] int dbid)
        {
            var tableDb = base.GetTryDb(dbid);
            var result  = new ApiResult <bool>();

            if (!string.IsNullOrEmpty(model))
            {
                var list    = Newtonsoft.Json.JsonConvert.DeserializeObject <List <CodeTableViewModel> >(model);
                var oldList = CodeTableDb.AsQueryable().In(list.Select(it => it.Id).ToList()).ToList();
                base.Check(oldList.Any(it => it.IsLock), string.Join(",", oldList.Where(it => it.IsLock).Select(it => it.ClassName)) + "是锁表状态禁止建表");
                List <EntitiesGen> genList = GetGenList(oldList, CodeTypeDb.GetList(), tableDb.CurrentConnectionConfig.DbType);
                foreach (var item in genList)
                {
                    item.PropertyGens = item.PropertyGens.Where(it => it.IsIgnore == false).ToList();
                    foreach (var property in item.PropertyGens)
                    {
                        if (property.IsSpecialType)
                        {
                            property.Type = "string";
                        }
                    }
                }
                string key = TemplateHelper.EntityKey + SyntaxTreeHelper.TemplateString.GetHashCode();
                foreach (var item in genList)
                {
                    var classString = TemplateHelper.GetTemplateValue(key, SyntaxTreeHelper.TemplateString, item);
                    var type        = SyntaxTreeHelper.GetModelTypeByClass(classString, item.ClassName);
                    tableDb.CurrentConnectionConfig.ConfigureExternalServices = new ConfigureExternalServices()
                    {
                        EntityNameService = (type, info) =>
                        {
                            if (info.EntityName == item.ClassName || (info.EntityName == null && info.DbTableName == item.ClassName))
                            {
                                info.EntityName       = item.ClassName;
                                info.DbTableName      = item.TableName;
                                info.TableDescription = item.Description;
                            }
                        },
                        EntityService = (type, info) =>
                        {
                            if (info.EntityName == item.ClassName)
                            {
                                var column = item.PropertyGens.FirstOrDefault(it => it.PropertyName == info.PropertyName);
                                info.DbColumnName      = column.DbColumnName;
                                info.ColumnDescription = column.Description;
                                info.IsNullable        = column.IsNullable;
                                info.Length            = Convert.ToInt32(column.Length);
                                info.DecimalDigits     = Convert.ToInt32(column.DecimalDigits);
                                info.IsPrimarykey      = column.IsPrimaryKey;
                                info.IsIdentity        = column.IsIdentity;
                                info.IsIgnore          = column.IsIgnore;
                                info.DataType          = column.DbType;
                                if (tableDb.CurrentConnectionConfig.DbType == DbType.Sqlite && info.IsIdentity)
                                {
                                    info.DataType = "integer";
                                }
                            }
                        }
                    };
                    tableDb.CodeFirst.InitTables(type);
                }
            }
            result.IsSuccess = true;
            return(result);
        }