T4模版生成实体(三)
作者:互联网
5. 定义T4模版及所要的变量
5.1 创建实体模版
右键添加新项,模版分为两种:文本模版,运行时文本模版
文本模版是填入什么,立刻就会生成你最终需要的文件
在展开的文件下
显然这个不是我们需要的,因为我们的要动态由代码来生成的
这里我们创建运行时模版
二者其实差在属性配置,选定文件右键属性或按Alt+回车
找到自定义工具。运行时模版是 TextTemplatingFilePreprocessor,文本模版是 TextTemplatingFileGenerator,改成对应的,重新保存一下,文件生成的就是对应的cs或txt了。
这里贴一下实体的模版
<#@ template language="C#" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Linq" #>
using System;
using System.ComponentModel.DataAnnotations.Schema;
<# if(BaseClassName == "Entity"){ #>
using Abp.Domain.Entities;
<# } #>
namespace KevisEtc.Entitys.<#= DbName#>
{
[Table("<#= tableInfo.TableName #>")]
public class <#= tableInfo.TableName.Replace("tbl_","T_") #> : <#= BaseClassName #>
{
<#
var arryBaseColumn = new string[]{ "Id", "Guid" ,"CreateTime", "CreaterGuid", "CreaterUser", "UpdateTime", "UpdaterGuid", "UpdaterUser" };
foreach (var columnInfo in columnInfoList)
{
//因为继承了基类,所以一些字段不需要输出
if(arryBaseColumn.Contains(columnInfo.ColumnName)){continue;}
#>
/// <summary>
/// <#= columnInfo.ColumnComment #>
/// </summary>
[Column("<#= columnInfo.ColumnName #>")]
public virtual <#= columnInfo.DataType #> <#= columnInfo.ColumnName #> { get; set; }
<#
}
#>
}
}
看起来应该很熟悉,就像在视图里面编码一样。
这边用到了一些自定义的变量,例如 tableInfo,columnInfoList,DbName,BaseClassName等
这个我新建一个目录,在里面创建跟这个名称一样,多了一个Ext。 模版文件叫 Entity.tt,变量定义的文件叫 EntityExt.cs,然后这个类的名称要跟模版生成的类名一致,也就是分部类。
using KevisEtc.T4.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace KevisEtc.T4.ABP
{
public partial class Entity
{
private string DbName = string.Empty;
private TableInfo tableInfo;
private List<ColumnInfo> columnInfoList;
private string BaseClassName = string.Empty;
public Entity(TableInfo tableInfo, List<ColumnInfo> columnInfo, string DbName)
{
this.tableInfo = tableInfo;
this.columnInfoList = columnInfo;
this.DbName = DbName;
BaseClassName = columnInfo.Where(p => p.ColumnName == "CreateTime").Count() > 0 ? "BaseEntity" : "Entity";
}
}
}
这边构建了一下有参构造函数,一会通过外部进行调用赋值。
外部只需要调用
ABP.Entity e = new ABP.Entity(tableInfo, ColumnInfoList, DbName);
File.WriteAllText(filePath, e.TransformText());
这样模版就生成啦。下一篇分享外部的代码。
标签:tableInfo,模版,T4,System,生成,using,Entity,DbName 来源: https://blog.csdn.net/shua67/article/details/112004769