博客
关于我
T4 生成数据库实体类
阅读量:420 次
发布时间:2019-03-06

本文共 3493 字,大约阅读时间需要 11 分钟。

来源不详,整理如下:

<#@ template language="C#" debug="True" hostspecific="True" #><#@ output extension=".cs" #><#@ assembly name="System.Data" #><#@ assembly name="System.xml" #><#@ import namespace="System.Collections.Generic" #><#@ import namespace="System.Data.SqlClient" #><#@ import namespace="System.Data" #>using System;namespace MyProject.Entities { <# 	string connectionString = "Data Source=localhost;Initial Catalog=IntegralDB;User ID=sa;Password=ABcd1234;"; 	SqlConnection conn = new SqlConnection(connectionString); 	conn.Open(); 	System.Data.DataTable schema = conn.GetSchema("TABLES"); 	string selectQuery = "select * from @tableName"; 	SqlCommand command = new SqlCommand(selectQuery,conn); 	SqlDataAdapter ad = new SqlDataAdapter(command); 	System.Data.DataSet ds = new DataSet();	string propQuery = "SELECT 表名=sobj.name,字段名=scol.name,字段说明=sprop.[value] FROM syscolumns as scol inner join sys.sysobjects as sobj on scol.id=sobj.id and sobj.xtype='U' and sobj.name<>'dtproperties' left join sys.extended_properties as sprop on scol.id=sprop.major_id and scol.colid=sprop.minor_id where sobj.name='@tableName' and scol.name='@columnName'"; 	SqlCommand command2 = new SqlCommand(propQuery,conn); 	SqlDataAdapter ad2 = new SqlDataAdapter(command2); 	System.Data.DataSet ds2 = new DataSet();	foreach(System.Data.DataRow row in schema.Rows) 	{  #>   		/// 		/// 数据表实体类:<#= row["TABLE_NAME"].ToString() #>Info 		/// 		[Serializable()]		public class <#= row["TABLE_NAME"].ToString() #>Info		{    <#			ds.Tables.Clear();			command.CommandText = selectQuery.Replace("@tableName",row["TABLE_NAME"].ToString()); 			ad.FillSchema(ds, SchemaType.Mapped, row["TABLE_NAME"].ToString());			foreach (DataColumn dc in ds.Tables[0].Columns)			{ 			#>			<# 			 ds2.Tables.Clear();			 command2.CommandText = propQuery.Replace("@tableName",row["TABLE_NAME"].ToString()); 			 command2.CommandText = command2.CommandText.Replace("@columnName",dc.ColumnName); 			 ad2.Fill(ds2);			#> 			/// 			/// <#= dc.DataType.Name #>:<#=ds2.Tables[0].Rows[0].ItemArray[2]#>			/// 				       			public <#= dc.DataType.Name #> <#= dc.ColumnName #> {get;set;}       	<# }  #>   	}            	<# 	} #>  }

  保留PowerDesigner生成的注释说明信息,并自动注释实体类字段,其中读取数据库读取字段说明的sql参考了如下代码:

select b.[value] from sys.columns a left join sys.extended_properties b on a.object_id=b.major_idand a.column_id=b.minor_id inner join sysobjects c on a.column_id=c.idand a.[name]='列名' and c.[name]='表名'实例:SELECT表名=case when a.colorder=1 then d.name else '' end,表说明=case when a.colorder=1 then isnull(f.value,'') else '' end,字段序号=a.colorder,字段名=a.name,标识=case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end,主键=case when exists(SELECT 1 FROM sysobjects where xtype='PK' and name in (SELECT name FROM sysindexes WHERE indid in(SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid))) then '√' else '' end,类型=b.name,占用字节数=a.length,长度=COLUMNPROPERTY(a.id,a.name,'PRECISION'),小数位数=isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),允许空=case when a.isnullable=1 then '√'else '' end,默认值=isnull(e.text,''),字段说明=isnull(g.[value],'')FROM syscolumns aleft join systypes b on a.xusertype=b.xusertypeinner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'left join syscomments e on a.cdefault=e.idleft join sys.extended_properties g on a.id=g.major_id and a.colid=g.minor_idleft join sys.extended_properties f on d.id=f.major_id and f.minor_id=0--where d.name='orders' --如果只查询指定表,加上此条件order by a.id,a.colorder

  Source:

转载地址:http://wafuz.baihongyu.com/

你可能感兴趣的文章
Manjaro 24.1 “Xahea” 发布!具有 KDE Plasma 6.1.5、GNOME 46 和最新的内核增强功能
查看>>
mapping文件目录生成修改
查看>>
MapReduce程序依赖的jar包
查看>>
mariadb multi-source replication(mariadb多主复制)
查看>>
MariaDB的简单使用
查看>>
MaterialForm对tab页进行隐藏
查看>>
Member var and Static var.
查看>>
memcached高速缓存学习笔记001---memcached介绍和安装以及基本使用
查看>>
memcached高速缓存学习笔记003---利用JAVA程序操作memcached crud操作
查看>>
Memcached:Node.js 高性能缓存解决方案
查看>>
memcache、redis原理对比
查看>>
memset初始化高维数组为-1/0
查看>>
Metasploit CGI网关接口渗透测试实战
查看>>
Metasploit Web服务器渗透测试实战
查看>>
MFC模态对话框和非模态对话框
查看>>
Moment.js常见用法总结
查看>>
MongoDB出现Error parsing command line: unrecognised option ‘--fork‘ 的解决方法
查看>>
mxGraph改变图形大小重置overlay位置
查看>>
MongoDB可视化客户端管理工具之NoSQLbooster4mongo
查看>>
Mongodb学习总结(1)——常用NoSql数据库比较
查看>>