博客
关于我
T4 生成数据库实体类
阅读量:412 次
发布时间: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/

你可能感兴趣的文章
virtualbox中 Kali Linux安装增强功能
查看>>
virtualbox中 Ubuntu挂载共享文件夹
查看>>
Python 内置函数笔记
查看>>
BootStrapTable 错误
查看>>
PHP 脚本不报错
查看>>
代码整洁之道小结
查看>>
悲观锁与乐观锁
查看>>
js new Date 创建时间默认是8点
查看>>
Python实现cmd命令连续执行
查看>>
罗马数字
查看>>
IO多路复用小故事
查看>>
纠错码简介
查看>>
码云 Pages 搭建
查看>>
《论可计算数及其在判定上的应用》简单理解
查看>>
中国剩余定理证明过程
查看>>
kafka告警简单方案
查看>>
java接口中多继承的问题
查看>>
java中Object.equals()简单用法
查看>>
一个小例子对多态简单的理解
查看>>
poj 2187 Beauty Contest(凸包求解多节点的之间的最大距离)
查看>>