找到mdoel.tt文件然后打开,按照以下操作
第一步:动态库的引用,其中$(SolutionDir)是自动获取项目根目录,有些引用动态库之后还需要引用相关的命名空间才能正确使用,比如System.Data。
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ assembly name="System.Core"#>
<#@ assembly name="System.Data"#>
<#@ assembly name="$(SolutionDir)\SmartSI.PayManger\bin\SmartSI.Common.dll"#>
<#@ assembly name="$(SolutionDir)\SmartSI.PayManger\bin\ServiceStack.Common.dll"#>
<#@ assembly name="C:\code\gzhouRsAdmin\SmartSI.Model\bin\Debug\MySql.Data.dll" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Data" #>
第二步:实现原理,其实在更新实体的时候要去查询数据库的相关库、表的字段,然后得到注释,这里我使用的是mysql,语句如下,tableName是表名称,colName是字段名称,table_schema是数据库名称
string sql = string.Format(@"SELECT table_name,column_comment,COLUMN_name as clnm from
information_schema.columns where table_schema='Testdata' and
column_comment is not null and column_comment !=''",tableName,colName);
在model.tt里建立一个实体类,这个实体类主要用来存放表的注释信息,下面list数组"Listcolumn_comment"会用到
public class modd
{
public string table_name { get; set; }
public string column_comment { get; set; }
public string clnm { get; set; }
}
在model.tt这里我们建立一个方法如下,其中"Listcolumn_comment"是用来存储取到的数据库的所有字段注释信息,因为更新实体的时候是遍历所有表,然后一个一个的去添加注释的,所以必须把"Listcolumn_comment"设置为"static",然后再遍历中就可以不用每次都要去查询一次数据库了,这样大大缩减了更新实体的时间。
public string GetRemark(EdmProperty edmProperty){
//System.Diagnostics.Debugger.Launch();
var tableName = edmProperty.DeclaringType.Name;
var colName=_code.Escape(edmProperty);
//System.Diagnostics.Debugger.Break();
string sql = string.Format(@"SELECT table_name,column_comment,COLUMN_name as clnm from
information_schema.columns where table_schema='testdata' and
column_comment is not null and column_comment !=''",tableName,colName);
string sqlcon = "Database=testdata;Data Source=192.168.1.2;User Id=test;Password=12345678;pooling=false;CharSet=utf8;port=3306";
object remark=new object();
try{
//用Listcolumn_comment来临时存储数据,避免频繁访问导致更新实体太慢的问题
if (Listcolumn_comment == null)
{
using (MySql.Data.MySqlClient.MySqlConnection conn = new MySqlConnection(sqlcon))
{
conn.Open();
MySqlDataAdapter command = new MySqlDataAdapter(sql, conn);
// MySql.Data.MySqlClient.MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand(sql, conn);
var ds = new DataSet();
command.Fill(ds, "ds");
Listcolumn_comment = ds.Tables.First().ToCopyModel<List<modd>>();
remark = Listcolumn_comment.FirstOrDefault(p =>
p.table_name.Equals(tableName) & p.clnm.Equals(colName))?.column_comment;
}
}
else
{
remark = Listcolumn_comment.FirstOrDefault(p =>
p.table_name.Equals(tableName) & p.clnm.Equals(colName))?.column_comment;
}
}
catch (Exception e)
{
remark=e;
}
return remark+"";
}
第三步:在model.tt文件里找到"<#=codeStringGenerator.Property(edmProperty)#>",在其上方添加
/// <summary>
/// <#=codeStringGenerator.GetRemark(edmProperty)#>
/// </summary>
这里主要是通过方法GetRemark来获取到注释信息
添加之后的信息如下:
/// <summary>
/// <#=codeStringGenerator.GetRemark(edmProperty)#>
/// </summary>
<#=codeStringGenerator.Property(edmProperty)#>
作者:403648571@qq.com,QQ群:695080688