2020年最后一天了,元旦得忙了,这篇收尾。
前面介绍了数据库查询表信息,模版如何生成。最后串起来吧。
项目下创建目录 MySql
里面创建类 CreateAbpEntity.cs 因为是要生成ABP框架的,所以这样命名了。
1.检查文件目录是否存在
#region CheckFileExist 【检查文件夹是否存在,不存在则新建】
/// <summary>
/// 检查文件夹是否存在,不存在则新建
/// </summary>
private static void CheckFileExist(bool isClearAll = false)
{
if (Directory.Exists(BasePath))
{
if (isClearAll)
Directory.Delete(BasePath, true);
}
//创建模版生成路径
Directory.CreateDirectory(BasePath);
//创建实体路径
Directory.CreateDirectory(EntityPath);
//创建EF层路径
Directory.CreateDirectory(EntityFrameworkPath);
//创建仓储路径
Directory.CreateDirectory(RepositoriesPath);
//创建仓储接口路径
Directory.CreateDirectory(IRepositoriesPath);
//创建应用层路径
Directory.CreateDirectory(ApplicationPath);
//创建服务路径
Directory.CreateDirectory(AppServicePath);
//创建服务接口路径
Directory.CreateDirectory(IAppServicePath);
}
#endregion
对应变量定义
private static string DbName = MySqlHelperKevis.DbName == "kevis_etc" ? "Default" : MySqlHelperKevis.DbName;
private static string _basePath = AppDomain.CurrentDomain.BaseDirectory + "/T4TemplateCreate/" + DbName + "/";
/// <summary>
/// 模版生成后的文件路径
/// </summary>
public static string BasePath { get { return _basePath; } set { _basePath = value; } }
/// <summary>
/// 实体文件生成后的路径
/// </summary>
private static string EntityPath = _basePath + "Entity/";
/// <summary>
/// EntityFramework文件夹生成的路径
/// </summary>
private static string EntityFrameworkPath = _basePath + "EntityFramework/";
/// <summary>
/// Repositories 文件夹生成的路径
/// </summary>
private static string RepositoriesPath = EntityFrameworkPath + "Repositories/";
/// <summary>
/// Repositories 文件夹生成的路径
/// </summary>
private static string IRepositoriesPath = EntityFrameworkPath + "IRepositories/";
/// <summary>
/// Application 文件夹生成的路径
/// </summary>
private static string ApplicationPath = _basePath + "Application/";
/// <summary>
/// AppService 文件夹生成的路径
/// </summary>
private static string AppServicePath = ApplicationPath + "AppService/";
/// <summary>
/// IAppService 文件夹生成的路径
/// </summary>
private static string IAppServicePath = ApplicationPath + "IAppService/";
2. 生成实体方法
#region CreateEntityFile 【创建实体类文件】
/// <summary>
/// 创建实体类文件
/// </summary>
/// <param name="TableName"></param>
public static void CreateEntityFile(string TableName = "")
{
CheckFileExist();
var list = new List<TableInfo>();
if (!string.IsNullOrWhiteSpace(TableName)) { list = TableInfoList.Where(p => p.TableName == TableName).ToList(); }
else { list = TableInfoList; }
if (list != null && list.Count > 0)
{
foreach (var tableInfo in list)
{
var ColumnInfoList = MySqlHelperKevis.getInstance().GetColumnInfoList(tableInfo.TableName);
if (ColumnInfoList != null && ColumnInfoList.Count > 0)
{
Console.WriteLine("正在加载模版 " + tableInfo.TableName + " ...");
ABP.Entity e = new ABP.Entity(tableInfo, ColumnInfoList, DbName);
//判断文件是否存在,不存在则创建.存在则覆盖
var filePath = EntityPath + tableInfo.TableName.Replace("tbl_", "T_") + ".cs";
Console.WriteLine("正在生成 " + tableInfo.TableName + " ...");
File.WriteAllText(filePath, e.TransformText());
Console.WriteLine("生成完成 " + tableInfo.TableName + "");
Console.WriteLine();
}
}
}
}
#endregion
因为每个方法都做了注释,这边代码就不做注释了
3. 最后在 Program.cs的Main方法调用就OK啦
static void Main(string[] args)
{
//CreateAbpEntity.CreateEntityFile("Admin");
CreateAbpEntity.CreateEntityFile();
}
这边可以针对具体表名来生成。
app.config里面配置数据库
<appSettings>
<!--数据库连接-->
<add key="MySqlConnection" value="server=127.0.0.1;user id=root;database=kevis_etc;password=123456;CharSet=utf8;sslMode=None;"/>
<!--需要生成代码的数据库名称-->
<add key="dbName" value="kevis_etc"/>
<!--需要生成代码的数据表名称,为空则生成所有-->
<add key="tbName" value=""/>
</appSettings>
这个也只是引子,还可自行扩展。