CloudGamingAdmin/admin-generate-ef-seed-data/GenerateSeeds/Program.cs
2024-11-15 02:58:48 +08:00

224 lines
7.3 KiB
C#

using GenerateSeeds;
using System.Text;
var connectionString = "Server=.;Database=hzy_microservices_sqlserver_20230227;User ID=sa;Password=123456;MultipleActiveResultSets=true;Encrypt=True;TrustServerCertificate=True;";
IFreeSql fsql = new FreeSql.FreeSqlBuilder()
.UseConnectionString(FreeSql.DataType.SqlServer, connectionString)
.UseAutoSyncStructure(false) //自动同步实体结构到数据库
.Build(); //请务必定义成 Singleton 单例模式
var tables = fsql.DbFirst.GetTablesByDatabase();
var useStringBuilder = new StringBuilder();
foreach (var table in tables)
{
var list = fsql.Ado.Query<Dictionary<string, object>>($"select * from {table.Name}");
if (list.Count == 0) continue;
if (table.Name.ToLower().Contains("log".ToLower())) continue;
if (table.Name.ToLower().StartsWith("__".ToLower())) continue;
var sb = new StringBuilder();
var entityName = Util.LineToHump(table.Name);
var className = $"Migrations{entityName}ModelBuilderExtensions";
// MigrationsLowCodeTableInfoModelBuilderExtensions.Seed(modelBuilder);
useStringBuilder.Append(className + ".Seed(modelBuilder);");
sb.Append($@"
namespace HZY.Repository.EntityFramework.Admin.Migrations.SeedsDatas.Datas;
public static class {className}
{{
public static void Seed(this ModelBuilder modelBuilder)
{{
// ===============================================表:{table.Name} 种子数据=============================================
modelBuilder.Entity<{entityName}>().HasData(");
var codes = new List<string>();
foreach (var item in list)
{
var rows = $"new {entityName}(){{";
var fileds = new List<string>();
foreach (var column in table.Columns)
{
var value = item[column.Name] ?? null;
if (value is string)
{
if (value != null && value.ToString().Count(w => w == '"') > 1)
{
var start = "\"";
var end = "\\\"";
var newValue = value.ToString().Replace(start, end);
fileds.Add($"{column.Name}=\"{newValue}\"");
}
else
{
fileds.Add($"{column.Name}=\"{(value == null ? null : value)}\"");
}
}
else if (value is Guid)
{
fileds.Add($"{column.Name}=Guid.Parse(\"{value}\")");
}
else if (value is DateTime || value is DateTime?)
{
fileds.Add($"{column.Name}=DateTime.Parse(\"{value}\")");
}
else if (value is bool)
{
fileds.Add($"{column.Name}=bool.Parse(\"{value}\")");
}
else if (column.Name == "PermissionType" && table.Name == "sys_data_authority")
{
fileds.Add($"{column.Name}=SysDataAuthorityPermissionTypeEnum.Self");
}
else if (column.Name == "Type" && table.Name == "sys_menu")
{
//SysMenuTypeEnum.菜单
if (value is int || value is int?)
{
if ((int)value == (int)SysMenuTypeEnum.)
{
fileds.Add($"{column.Name}=SysMenuTypeEnum.菜单");
}
else
{
fileds.Add($"{column.Name}=SysMenuTypeEnum.目录");
}
}
}
else if (column.Name == "Mode" && table.Name == "sys_menu")
{
if (value is int || value is int?)
{
if ((int)value == (int)SysMenuModeEnum.)
{
fileds.Add($"{column.Name}=SysMenuModeEnum.普通");
}
else
{
fileds.Add($"{column.Name}=SysMenuModeEnum.微前端");
}
}
}
else if (column.Name == "State" && (table.Name == "sys_post" || table.Name == "sys_organization"))
{
fileds.Add($"{column.Name}=StateEnum.正常");
}
else if (column.Name == "State" && table.Name == "quartz_job_task")
{
if (value is int || value is int?)
{
if ((int)value == (int)QuartzJobTaskStateEnum.)
{
fileds.Add($"{column.Name}=QuartzJobTaskStateEnum.运行中");
}
else
{
fileds.Add($"{column.Name}=QuartzJobTaskStateEnum.未运行");
}
}
}
else if (column.Name == "Type" && table.Name == "quartz_job_task")
{
if (value is int || value is int?)
{
if ((int)value == (int)QuartzJobTaskTypeEnum.Local)
{
fileds.Add($"{column.Name}=QuartzJobTaskTypeEnum.Local");
}
else
{
fileds.Add($"{column.Name}=QuartzJobTaskTypeEnum.WebApi");
}
}
}
else if (column.Name == "RequsetMode" && table.Name == "quartz_job_task")
{
if (value is int || value is int?)
{
if ((int)value == (int)QuartzJobTaskRequsetModeEnum.Delete)
{
fileds.Add($"{column.Name}=QuartzJobTaskRequsetModeEnum.Delete");
}
if ((int)value == (int)QuartzJobTaskRequsetModeEnum.Get)
{
fileds.Add($"{column.Name}=QuartzJobTaskRequsetModeEnum.Get");
}
if ((int)value == (int)QuartzJobTaskRequsetModeEnum.Post)
{
fileds.Add($"{column.Name}=QuartzJobTaskRequsetModeEnum.Post");
}
if (value == null)
{
fileds.Add($"{column.Name}=null");
}
}
}
else
{
if (value == null || string.IsNullOrWhiteSpace(value.ToString()))
{
fileds.Add($"{column.Name}=null");
}
else
{
fileds.Add($"{column.Name}={value}");
}
}
}
rows += string.Join(",", fileds);
rows += $"}}";
codes.Add(rows);
}
sb.Append(string.Join(",", codes));
sb.Append(@");
}
}
");
//验证文件是否存在
if (!Directory.Exists(AppDomain.CurrentDomain.BaseDirectory + "codes"))
{
Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory + "/codes");
}
var fileName = "/codes/" + className + ".cs";
if (File.Exists(AppDomain.CurrentDomain.BaseDirectory + fileName))
{
File.Delete(AppDomain.CurrentDomain.BaseDirectory + fileName);
}
File.WriteAllTextAsync(AppDomain.CurrentDomain.BaseDirectory + fileName, sb.ToString());
}
Console.WriteLine(useStringBuilder.ToString());
Console.WriteLine("完成!!!");
Console.ReadKey();