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); }
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()); }
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; } }
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); }