246 lines
11 KiB
C#
246 lines
11 KiB
C#
using New_College.Common;
|
||
using New_College.Common.DB;
|
||
using New_College.Common.Helper;
|
||
using New_College.Model.Models;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.IO;
|
||
using System.Linq;
|
||
using System.Reflection;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
|
||
namespace New_College.Model.Seed
|
||
{
|
||
public class DBSeed
|
||
{
|
||
private static string SeedDataFolder = "BlogCore.Data.json/{0}.tsv";
|
||
|
||
|
||
/// <summary>
|
||
/// 异步添加种子数据
|
||
/// </summary>
|
||
/// <param name="myContext"></param>
|
||
/// <param name="WebRootPath"></param>
|
||
/// <returns></returns>
|
||
public static async Task SeedAsync(MyContext myContext, string WebRootPath)
|
||
{
|
||
try
|
||
{
|
||
if (string.IsNullOrEmpty(WebRootPath))
|
||
{
|
||
throw new Exception("获取wwwroot路径时,异常!");
|
||
}
|
||
|
||
SeedDataFolder = Path.Combine(WebRootPath, SeedDataFolder);
|
||
|
||
Console.WriteLine("************ New_College DataBase Set *****************");
|
||
Console.WriteLine($"Is multi-DataBase: {Appsettings.app(new string[] { "MutiDBEnabled" })}");
|
||
Console.WriteLine($"Is CQRS: {Appsettings.app(new string[] { "CQRSEnabled" })}");
|
||
Console.WriteLine();
|
||
Console.WriteLine($"Master DB ConId: {MyContext.ConnId}");
|
||
Console.WriteLine($"Master DB Type: {MyContext.DbType}");
|
||
Console.WriteLine($"Master DB ConnectString: {MyContext.ConnectionString}");
|
||
Console.WriteLine();
|
||
if (Appsettings.app(new string[] { "MutiDBEnabled" }).ObjToBool())
|
||
{
|
||
var slaveIndex = 0;
|
||
BaseDBConfig.MutiConnectionString.Item1.Where(x => x.ConnId != MainDb.CurrentDbConnId).ToList().ForEach(m =>
|
||
{
|
||
slaveIndex++;
|
||
Console.WriteLine($"Slave{slaveIndex} DB ID: {m.ConnId}");
|
||
Console.WriteLine($"Slave{slaveIndex} DB Type: {m.DbType}");
|
||
Console.WriteLine($"Slave{slaveIndex} DB ConnectString: {m.Connection}");
|
||
Console.WriteLine($"--------------------------------------");
|
||
});
|
||
}
|
||
else if (Appsettings.app(new string[] { "CQRSEnabled" }).ObjToBool())
|
||
{
|
||
var slaveIndex = 0;
|
||
BaseDBConfig.MutiConnectionString.Item2.Where(x => x.ConnId != MainDb.CurrentDbConnId).ToList().ForEach(m =>
|
||
{
|
||
slaveIndex++;
|
||
Console.WriteLine($"Slave{slaveIndex} DB ID: {m.ConnId}");
|
||
Console.WriteLine($"Slave{slaveIndex} DB Type: {m.DbType}");
|
||
Console.WriteLine($"Slave{slaveIndex} DB ConnectString: {m.Connection}");
|
||
Console.WriteLine($"--------------------------------------");
|
||
});
|
||
}
|
||
else
|
||
{
|
||
}
|
||
|
||
Console.WriteLine();
|
||
|
||
|
||
// 创建数据库
|
||
Console.WriteLine($"Create Database(The Db Id:{MyContext.ConnId})...");
|
||
myContext.Db.DbMaintenance.CreateDatabase();
|
||
ConsoleHelper.WriteSuccessLine($"Database created successfully!");
|
||
|
||
|
||
// 创建数据库表,遍历指定命名空间下的class,
|
||
// 注意不要把其他命名空间下的也添加进来。
|
||
Console.WriteLine("Create Tables...");
|
||
var modelTypes = from t in Assembly.GetExecutingAssembly().GetTypes()
|
||
where t.IsClass && t.Namespace == "New_College.Model.Models"
|
||
select t;
|
||
modelTypes.ToList().ForEach(t =>
|
||
{
|
||
if (!myContext.Db.DbMaintenance.IsAnyTable(t.Name))
|
||
{
|
||
Console.WriteLine(t.Name);
|
||
myContext.Db.CodeFirst.InitTables(t);
|
||
}
|
||
});
|
||
ConsoleHelper.WriteSuccessLine($"Tables created successfully!");
|
||
Console.WriteLine();
|
||
|
||
|
||
|
||
if (Appsettings.app(new string[] { "AppSettings", "SeedDBDataEnabled" }).ObjToBool())
|
||
{
|
||
Console.WriteLine($"Seeding database data (The Db Id:{MyContext.ConnId})...");
|
||
|
||
#region BlogArticle
|
||
if (!await myContext.Db.Queryable<BlogArticle>().AnyAsync())
|
||
{
|
||
myContext.GetEntityDB<BlogArticle>().InsertRange(JsonHelper.ParseFormByJson<List<BlogArticle>>(FileHelper.ReadFile(string.Format(SeedDataFolder, "BlogArticle"), Encoding.UTF8)));
|
||
Console.WriteLine("Table:BlogArticle created success!");
|
||
}
|
||
else
|
||
{
|
||
Console.WriteLine("Table:BlogArticle already exists...");
|
||
}
|
||
#endregion
|
||
|
||
|
||
#region Modules
|
||
if (!await myContext.Db.Queryable<Modules>().AnyAsync())
|
||
{
|
||
myContext.GetEntityDB<Modules>().InsertRange(JsonHelper.ParseFormByJson<List<Modules>>(FileHelper.ReadFile(string.Format(SeedDataFolder, "Modules"), Encoding.UTF8)));
|
||
Console.WriteLine("Table:Modules created success!");
|
||
}
|
||
else
|
||
{
|
||
Console.WriteLine("Table:Modules already exists...");
|
||
}
|
||
#endregion
|
||
|
||
|
||
#region Permission
|
||
if (!await myContext.Db.Queryable<Permission>().AnyAsync())
|
||
{
|
||
myContext.GetEntityDB<Permission>().InsertRange(JsonHelper.ParseFormByJson<List<Permission>>(FileHelper.ReadFile(string.Format(SeedDataFolder, "Permission"), Encoding.UTF8)));
|
||
Console.WriteLine("Table:Permission created success!");
|
||
}
|
||
else
|
||
{
|
||
Console.WriteLine("Table:Permission already exists...");
|
||
}
|
||
#endregion
|
||
|
||
|
||
#region Role
|
||
if (!await myContext.Db.Queryable<Role>().AnyAsync())
|
||
{
|
||
myContext.GetEntityDB<Role>().InsertRange(JsonHelper.ParseFormByJson<List<Role>>(FileHelper.ReadFile(string.Format(SeedDataFolder, "Role"), Encoding.UTF8)));
|
||
Console.WriteLine("Table:Role created success!");
|
||
}
|
||
else
|
||
{
|
||
Console.WriteLine("Table:Role already exists...");
|
||
}
|
||
#endregion
|
||
|
||
|
||
#region RoleModulePermission
|
||
if (!await myContext.Db.Queryable<RoleModulePermission>().AnyAsync())
|
||
{
|
||
myContext.GetEntityDB<RoleModulePermission>().InsertRange(JsonHelper.ParseFormByJson<List<RoleModulePermission>>(FileHelper.ReadFile(string.Format(SeedDataFolder, "RoleModulePermission"), Encoding.UTF8)));
|
||
Console.WriteLine("Table:RoleModulePermission created success!");
|
||
}
|
||
else
|
||
{
|
||
Console.WriteLine("Table:RoleModulePermission already exists...");
|
||
}
|
||
#endregion
|
||
|
||
|
||
#region Topic
|
||
if (!await myContext.Db.Queryable<Topic>().AnyAsync())
|
||
{
|
||
myContext.GetEntityDB<Topic>().InsertRange(JsonHelper.ParseFormByJson<List<Topic>>(FileHelper.ReadFile(string.Format(SeedDataFolder, "Topic"), Encoding.UTF8)));
|
||
Console.WriteLine("Table:Topic created success!");
|
||
}
|
||
else
|
||
{
|
||
Console.WriteLine("Table:Topic already exists...");
|
||
}
|
||
#endregion
|
||
|
||
|
||
#region TopicDetail
|
||
if (!await myContext.Db.Queryable<TopicDetail>().AnyAsync())
|
||
{
|
||
myContext.GetEntityDB<TopicDetail>().InsertRange(JsonHelper.ParseFormByJson<List<TopicDetail>>(FileHelper.ReadFile(string.Format(SeedDataFolder, "TopicDetail"), Encoding.UTF8)));
|
||
Console.WriteLine("Table:TopicDetail created success!");
|
||
}
|
||
else
|
||
{
|
||
Console.WriteLine("Table:TopicDetail already exists...");
|
||
}
|
||
#endregion
|
||
|
||
|
||
#region UserRole
|
||
if (!await myContext.Db.Queryable<UserRole>().AnyAsync())
|
||
{
|
||
myContext.GetEntityDB<UserRole>().InsertRange(JsonHelper.ParseFormByJson<List<UserRole>>(FileHelper.ReadFile(string.Format(SeedDataFolder, "UserRole"), Encoding.UTF8)));
|
||
Console.WriteLine("Table:UserRole created success!");
|
||
}
|
||
else
|
||
{
|
||
Console.WriteLine("Table:UserRole already exists...");
|
||
}
|
||
#endregion
|
||
|
||
|
||
#region sysUserInfo
|
||
if (!await myContext.Db.Queryable<sysUserInfo>().AnyAsync())
|
||
{
|
||
myContext.GetEntityDB<sysUserInfo>().InsertRange(JsonHelper.ParseFormByJson<List<sysUserInfo>>(FileHelper.ReadFile(string.Format(SeedDataFolder, "sysUserInfo"), Encoding.UTF8)));
|
||
Console.WriteLine("Table:sysUserInfo created success!");
|
||
}
|
||
else
|
||
{
|
||
Console.WriteLine("Table:sysUserInfo already exists...");
|
||
}
|
||
#endregion
|
||
|
||
|
||
#region TasksQz
|
||
if (!await myContext.Db.Queryable<TasksQz>().AnyAsync())
|
||
{
|
||
myContext.GetEntityDB<TasksQz>().InsertRange(JsonHelper.ParseFormByJson<List<TasksQz>>(FileHelper.ReadFile(string.Format(SeedDataFolder, "TasksQz"), Encoding.UTF8)));
|
||
Console.WriteLine("Table:TasksQz created success!");
|
||
}
|
||
else
|
||
{
|
||
Console.WriteLine("Table:TasksQz already exists...");
|
||
}
|
||
#endregion
|
||
|
||
ConsoleHelper.WriteSuccessLine($"Done seeding database!");
|
||
}
|
||
|
||
Console.WriteLine();
|
||
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
throw new Exception("1、如果使用的是Mysql,生成的数据库字段字符集可能不是utf8的,手动修改下,或者尝试方案:删掉数据库,在连接字符串后加上CharSet=UTF8mb4,重新生成数据库. \n 2、其他错误:" + ex.Message);
|
||
}
|
||
}
|
||
}
|
||
} |