博客
关于我
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/

你可能感兴趣的文章
MySQL中你必须知道的10件事,1.5万字!
查看>>
MySQL中使用IN()查询到底走不走索引?
查看>>
Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
查看>>
MySql中关于geometry类型的数据_空的时候如何插入处理_需用null_空字符串插入会报错_Cannot get geometry object from dat---MySql工作笔记003
查看>>
mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
查看>>
mysql中出现Unit mysql.service could not be found 的解决方法
查看>>
mysql中出现update-alternatives: 错误: 候选项路径 /etc/mysql/mysql.cnf 不存在 dpkg: 处理软件包 mysql-server-8.0的解决方法(全)
查看>>
Mysql中各类锁的机制图文详细解析(全)
查看>>
MySQL中地理位置数据扩展geometry的使用心得
查看>>
Mysql中存储引擎简介、修改、查询、选择
查看>>
Mysql中存储过程、存储函数、自定义函数、变量、流程控制语句、光标/游标、定义条件和处理程序的使用示例
查看>>
mysql中实现rownum,对结果进行排序
查看>>
mysql中对于数据库的基本操作
查看>>
Mysql中常用函数的使用示例
查看>>
MySql中怎样使用case-when实现判断查询结果返回
查看>>
Mysql中怎样使用update更新某列的数据减去指定值
查看>>
Mysql中怎样设置指定ip远程访问连接
查看>>
mysql中数据表的基本操作很难嘛,由这个实验来带你从头走一遍
查看>>
Mysql中文乱码问题完美解决方案
查看>>
mysql中的 +号 和 CONCAT(str1,str2,...)
查看>>