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) 到工程里,将以下代码添加到工程里,改成你想要的数据库连接语句,然后运行,就会有实体类了,简单暴力的写法,我的主要目的主要是注释。。。,哈,格式不对自己调 ,到时候会多一个文件,就是空白文件的cs文件,删掉就完了。
参考教程
1、http://www.cnblogs.com/zhongxinwang/p/3540283.html //批量生成文件
2、http://www.jb51.net/article/34530.htm //获取表或者字段的扩展属性
1、先把manager.ttinclude添加到工程里
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); #>