方法思路是通过T4模板生成类文件的时候增加字段描述,首先添加一个模板文件GetComments.ttinclude,如下
1、打开编写代码:
<#@ template language="C#" hostspecific="True" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Text" #>
<#@ assembly name="System.Data" #>
<#@ assembly name="$(SolutionDir)AppServer.Web\bin\Oracle.ManagedDataAccess.dll"#>
<#@ import namespace="System.Data" #>
<#@ import namespace="Oracle.ManagedDataAccess.Client"#>
<#+
DataTable dt;
private int Square(int i)
{
OracleConnection conn = new OracleConnection("Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ip or servername)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)));Persist Security Info=True;User ID=*****;Password=****;");
conn.Open();
var cmd = conn.CreateCommand();
string sql = @"select TABLE_NAME,COLUMN_NAME,COMMENTS from USER_COL_COMMENTS WHERE TABLE_NAME IN (select t.table_name from user_tab_comments t)";
OracleDataAdapter oda = new OracleDataAdapter(sql, conn);
dt = new DataTable();
oda.Fill(dt);
conn.Close();
return dt.Rows.Count;
}
public string GetFieldDesc(string table, string field)
{
if(dt==null){
Square(12);
}
DataRow dr = dt.Select(string.Format("TABLE_NAME='{0}' and COLUMN_NAME='{1}'", table, field)).FirstOrDefault(); //
if (dr != null)
return dr["COMMENTS"].ToString();
else
return "无描述";
}
#>
因为数据库是oracle数据库用到了Oracle.ManagedDataAccess.dll,所以代码中有<#@ assembly name="$(SolutionDir)AppServer.Web\bin\Oracle.ManagedDataAccess.dll"#>一行,意思是引用这个程序集。如果你是SQL或其它数据库,修改一下部分代码就可以了。
2、打开Model1.tt,引用刚才的文件
<#@ include file="GetComments.ttinclude" #>
找到生成字段名的地方,我的EF6.1.3中是这样的<#=codeStringGenerator.Property(edmProperty)#>。在其前面添加这段代码:
/// <summary> /// <#=GetFieldDesc(code.Escape(entity),code.Escape(edmProperty))#> /// </summary>
保存即可。