EF Database First 给字段添加描述

 方法思路是通过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>

 

保存即可。

posted @ 2015-11-13 18:11  Fady  阅读(862)  评论(0编辑  收藏  举报