网络上找到比较多的教程,都是第二步的。
string summary=string.Empty;
在foreach里面,将表的注释取出来
if(entity.Documentation !=null && entity.Documentation.Summary!=null)
summary=entity.Documentation.Summary;
else
summary="";
后续在
<#=codeStringGenerator.UsingDirectives(inHeader: false)#>
<#=codeStringGenerator.EntityClassOpening(entity)#>
的中间,加入注释
///
/// <#=summary#>
///
那么,完整的代码如下:
string summary=string.Empty;
foreach (var entity in typeMapper.GetItemsToGenerate(itemCollection))
{
fileManager.StartNewFile(entity.Name + ".cs");
BeginNamespace(code);
if(entity.Documentation !=null && entity.Documentation.Summary!=null)
summary=entity.Documentation.Summary;
else
summary="这个表没有摘要(注释)";
#>
<#=codeStringGenerator.UsingDirectives(inHeader: false)#>
///
/// <#=summary#>
///
<#=codeStringGenerator.EntityClassOpening(entity)#>
这里是类的注释,后续属性的注释也是一样的
找到
foreach (var edmProperty in simpleProperties)
这个是属性的循环生成,注释也在这里面写
添加一个属性的摘要获取:
if (edmProperty.Documentation != null && edmProperty.Documentation.Summary != null)
{
summary=edmProperty.Documentation.Summary;
}
else
{
summary="没有属性注释";
}
然后在
<#=codeStringGenerator.Property(edmProperty)#>
的上面添加注释,完整代码如下:
foreach (var edmProperty in simpleProperties)
{
if (edmProperty.Documentation != null && edmProperty.Documentation.Summary != null)
{
summary=edmProperty.Documentation.Summary;
}
else
{
summary="没有属性注释";
}
#>
///
/// <#=summary#>
///
<#=codeStringGenerator.Property(edmProperty)#>
上面是从摘要到实体的注释过程。
可是,明明数据库中已经写好了注释,这里如果在模版里再写一遍,总感觉太麻烦。
那么在上面的方法中,可以做一步扩展,那就是,直接从数据库中获取注释。
具体代码如下:
写一个获取字段注释的类,根据t4模版的语法,类要这么写:
<#@ assembly name="System.Data" #>
<#@ import namespace="System.Data"#>
<#@ assembly name="MySql.Data"#>
<#@ import namespace="MySql.Data.MySqlClient"#>
<#+
public class MySqlSummaryHelper
{
public readonly string ConnectionString = "server={0};user id={1};password={2};database=information_schema;";
public DataTable dbSummary = new DataTable();
public MySqlSummaryHelper(string server,string account,string password)
{
string commStr = string.Format(ConnectionString,server,account,password);
using (MySqlConnection connection = new MySqlConnection(commStr))
{
string sql = "SELECT t.TABLE_NAME,t.TABLE_COMMENT,c.COLUMN_NAME,c.COLUMN_TYPE,c.COLUMN_COMMENT FROM information_schema.TABLES t,INFORMATION_SCHEMA.Columns c WHERE c.TABLE_NAME=t.TABLE_NAME AND t.`TABLE_SCHEMA`='zzw_power'";
MySqlCommand command = new MySqlCommand(sql, connection);
MySqlDataAdapter adapter = new MySqlDataAdapter(command);
adapter.Fill(dbSummary);
}
}
public string GetTableComment(string tableName)
{
string selectSql = string.Format("TABLE_NAME='{0}'",tableName);
return this.dbSummary.Select(selectSql).First()["TABLE_COMMENT"].ToString();
}
public string GetColumnComment(string tableName,string columnName)
{
string selectSql = string.Format("TABLE_NAME='{0}' AND COLUMN_NAME='{1}'",tableName,columnName);
return this.dbSummary.Select(selectSql).First()["COLUMN_COMMENT"].ToString();
}
}
#>
应该是比较好理解的,
<#@ assembly name="System.Data" #>
项目中的引用dll
<#@ import namespace="MySql.Data.MySqlClient"#>
类似using语法,就是打开命名空间
然后在<#+ public class xx{} #>
里面,写一个辅助类
实例化这个类,在构造参数中传入server、account、password,就可以通过GetTableComment和GetColumnComment两个方法去获取字段名了。
具体代码如下:
1、实例化一个对象,可以写在summary附近
MySqlSummaryHelper summaryDb = new MySqlSummaryHelper("127.0.0.1","root","123456");
2、还记得前面获取类注释和属性注释的时候,获取不到注释的处理么,我自己写了个字符串进去。
现在可以将那个字符串,换成方法的调用了,分别如下:
if(entity.Documentation !=null && entity.Documentation.Summary!=null)
summary=entity.Documentation.Summary;
else
summary=summaryDb.GetTableComment(entity.Name);
if (edmProperty.Documentation != null && edmProperty.Documentation.Summary != null)
{
summary=edmProperty.Documentation.Summary;
}
else
{
summary=summaryDb.GetColumnComment(edmProperty.DeclaringType.Name,edmProperty.Name);
}
这里讲解了大概的tt修改过程,以及修改的原因。
如果还有不理解的,建议搜索t4语法与调试技巧,花几分钟初步了解一下t4模版,想来会更好理解。