欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C# T4 模板 数据库实体类生成模板(带注释,娱乐用)

程序员文章站 2023-01-06 09:38:23
说明:。。,有些工具生成实体类没注释,不能和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添加到工程里 
2、添加空白文件  文本模板(.tt)  到工程里,将以下代码添加到工程里,改成你想要的数据库连接语句,然后运行,就会有实体类了,简单暴力的写法,我的主要目的主要是注释。。。,哈,格式不对自己调C# T4 模板 数据库实体类生成模板(带注释,娱乐用) ,到时候会多一个文件,就是空白文件的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); #>