浏览代码

😁优化动态建表流程

zuohuaijun 2 年之前
父节点
当前提交
d2475d0d18
共有 1 个文件被更改,包括 12 次插入22 次删除
  1. 12 22
      Admin.NET/Admin.NET.Core/Service/DataBase/SysDatabaseService.cs

+ 12 - 22
Admin.NET/Admin.NET.Core/Service/DataBase/SysDatabaseService.cs

@@ -137,35 +137,25 @@ public class SysDatabaseService : IDynamicApiController, ITransient
 
         var config = App.GetOptions<DbConnectionOptions>().ConnectionConfigs.FirstOrDefault(u => u.ConfigId == input.ConfigId);
 
+        var db = _db.AsTenant().GetConnectionScope(input.ConfigId);
+        var typeBilder = db.DynamicBuilder().CreateClass(input.TableName, new SugarTable() { TableName = input.TableName, TableDescription = input.Description });
         input.DbColumnInfoList.ForEach(m =>
         {
-            columns.Add(new DbColumnInfo
+            var dbColumnName = config.DbSettings.EnableUnderLine ? UtilMethods.ToUnderLine(m.DbColumnName.Trim()) : m.DbColumnName.Trim();
+            var isPrimarykey = columns.Any(m => m.IsPrimarykey);
+            // 虚拟类都默认String,具体以列数据类型为准
+            typeBilder.CreateProperty(dbColumnName, typeof(string), new SugarColumn()
             {
-                DbColumnName = config.DbSettings.EnableUnderLine ? UtilMethods.ToUnderLine(m.DbColumnName.Trim()) : m.DbColumnName.Trim(),
-                DataType = m.DataType,
+                IsPrimaryKey = isPrimarykey,
+                IsIdentity = m.IsIdentity == 1,
+                ColumnDataType = m.DataType,
                 Length = m.Length,
-                ColumnDescription = m.ColumnDescription,
                 IsNullable = m.IsNullable == 1,
-                IsIdentity = m.IsIdentity == 1,
-                IsPrimarykey = m.IsPrimarykey == 1,
-                DecimalDigits = m.DecimalDigits
+                DecimalDigits = m.DecimalDigits,
+                ColumnDescription = m.ColumnDescription,
             });
         });
-        var db = _db.AsTenant().GetConnectionScope(input.ConfigId);
-        db.DbMaintenance.CreateTable(input.TableName, columns, false);
-
-        if (db.CurrentConnectionConfig.DbType == SqlSugar.DbType.Sqlite)
-            return;
-
-        if (columns.Any(m => m.IsPrimarykey))
-            db.DbMaintenance.AddPrimaryKey(input.TableName, columns.FirstOrDefault(m => m.IsPrimarykey).DbColumnName);
-
-        db.DbMaintenance.AddTableRemark(input.TableName, input.Description);
-        input.DbColumnInfoList.ForEach(m =>
-        {
-            m.DbColumnName = config.DbSettings.EnableUnderLine ? UtilMethods.ToUnderLine(m.DbColumnName) : m.DbColumnName;
-            db.DbMaintenance.AddColumnRemark(m.DbColumnName, input.TableName, string.IsNullOrWhiteSpace(m.ColumnDescription) ? m.DbColumnName : m.ColumnDescription);
-        });
+        db.CodeFirst.InitTables(typeBilder.BuilderType());
     }
 
     /// <summary>