C# T4 模板 數據庫實體類生成模板(帶注釋,娛樂用)


 說明:。。,有些工具生成實體類沒注釋,不能和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)  到工程里,將以下代碼添加到工程里,改成你想要的數據庫連接語句,然后運行,就會有實體類了,簡單暴力的寫法,我的主要目的主要是注釋。。。,哈,格式不對自己調  ,到時候會多一個文件,就是空白文件的cs文件,刪掉就完了。

<#@ 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); #>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM