說明:。。,有些工具生成實體類沒註釋,不能和SqlServer的MS_Description屬性一起使用,然後照著網上的資源,隨便寫了個生成模板,自娛自樂向,其實卵用都沒有參考教程 1、http://www.cnblogs.com/zhongxinWang/p/3540283.html //批量生成 ...
說明:。。,有些工具生成實體類沒註釋,不能和SqlServer的MS_Description屬性一起使用,然後照著網上的資源,隨便寫了個生成模板,自娛自樂向,其實卵用都沒有
參考教程
1、http://www.cnblogs.com/zhongxinWang/p/3540283.html //批量生成文件
2、http://www.jb51.net/article/34530.htm //獲取表或者欄位的擴展屬性
1、先把Manager.ttinclude添加到工程里http://www.cnblogs.com/zengxiangzhan/p/3250105.html
2、添加空白文件 文本模板(.tt) 到工程里,將以下代碼添加到工程里,改成你想要的資料庫連接語句,然後運行,就會有實體類了,簡單暴力的寫法,我的主要目的主要是註釋。。。,哈,格式不對自己調
![](http://ctc.qzs.qq.com/qzone/em/e106.gif)
<#@ template language="C#" debug="True" hostspecific="True" #> <#@ output extension=".cs" #> <#@ assembly name="System.Data" #> <#@ assembly name="System.xml" #> <#@ assembly name="System.Core"#> <#@ import namespace="System.Collections.Generic" #> <#@ import namespace="System.Data.SqlClient" #> <#@ import namespace="System.Data" #> <#@ import namespace="System.Linq"#> <#@include file="$(ProjectDir)\Manager.ttinclude"#> <# var manager = Manager.Create(Host, GenerationEnvironment); #> <# manager.StartHeader(); #> /****************************根據資料庫連接生成資料庫實體類生成工具,只適合.net 4.0及以上*********************** SELECT value FROM ::fn_listextendedproperty(NULL, 'user', 'dbo', 'table','{0}', {1}, DEFAULT) WHERE name='MS_Description' {0} : 表名 {1} : 1、DEFAULT作為參數 查詢表的擴展屬性MS_Description 作為每一個實體類的備註 2、 'column'作為參數 且完整語句如 SELECT value FROM ::fn_listextendedproperty(NULL, 'user', 'dbo', 'table','{0}',DEFAULT, DEFAULT) WHERE name='MS_Description' and objname='{1}' 時, {0} :表名 {1} :欄位名 查詢的是某個表的欄位名的擴展屬性MS_Description 註意:資料庫的欄位欄位名是什麼樣子,屬性名,就是什麼樣子,所以請一定要有命名規範 */ using System; namespace DataComandEntity { <# manager.EndBlock(); #> <# //資料庫連接語句 string ConnectionStr="Data Source=******;Initial Catalog=MeterIndex;Persist Security Info=True;User ID=****;Password=****;pooling=true"; SqlConnection conn = new SqlConnection(ConnectionStr); conn.Open(); System.Data.DataTable schema = conn.GetSchema("TABLES"); //獲取資料庫架構信息 string selectQuery = "select * from @tableName"; //正確的,後面會用Replace替換 SqlCommand command = new SqlCommand(selectQuery,conn); SqlDataAdapter sda = new SqlDataAdapter(command); System.Data.DataSet ds = new DataSet(); foreach(System.Data.DataRow row in schema.Rows) { String strModel="SELECT value FROM ::fn_listextendedproperty(NULL, 'user', 'dbo', 'table','{0}', {1}, DEFAULT) WHERE name='MS_Description'"; //SQL語句模版 String TABLE_NAME=row["TABLE_NAME"].ToString(); //獲取表名 manager.StartNewFile(TABLE_NAME+".cs"); //獲取表的擴展屬性 using(SqlConnection connT1=new SqlConnection(conn.ConnectionString)){ connT1.Open(); using(SqlCommand cmd=new SqlCommand(string.Format(strModel,TABLE_NAME,"DEFAULT"),connT1)){ using(SqlDataReader sdr=cmd.ExecuteReader()){ if(sdr.HasRows){ //如果有結果 sdr.Read(); #> /// <summary> /// <#=sdr[0].ToString().Trim()#> /// </summary> <# } } } } #> public class <#=TABLE_NAME #> { <# ds.Tables.Clear(); command.CommandText = selectQuery.Replace("@tableName",row["TABLE_NAME"].ToString()); sda.FillSchema(ds, SchemaType.Mapped, row["TABLE_NAME"].ToString()); foreach (DataColumn dc in ds.Tables[0].Columns) //遍歷列名 { String COLUMN_NAME=dc.ColumnName.Trim(); using(SqlConnection connT2=new SqlConnection(conn.ConnectionString)){ connT2.Open(); using(SqlCommand cmd2=new SqlCommand()){ //拼接語句 cmd2.CommandText=string.Format(strModel,TABLE_NAME,"'column'")+string.Format(" and objname='{0}'",COLUMN_NAME); cmd2.Connection=connT2; using(SqlDataReader sdr2=cmd2.ExecuteReader()){ if(sdr2.HasRows){ sdr2.Read(); #> /// <summary> /// <#=sdr2[0].ToString().Trim()#> /// </summary> <# } } } } #> public <#= dc.DataType.Name #> <#= COLUMN_NAME #> { get; set; } <# } #> } <# manager.EndBlock(); } #> <# manager.StartFooter(); #> } <# manager.EndBlock(); #> <# manager.Process(true); #>