T4模版生成实体(四)

6 篇文章 0 订阅
4 篇文章 0 订阅

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>

这个也只是引子,还可自行扩展。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值