


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、T4模板根据DB生成实体类阅读目录前言原理3.oracle4.Mssql前言为什么会有这篇文章了,最近看到了一些框架,里面要写的代码太多了,故此就想偷懒,要是能写出一个T4模板,在数据库添加表后,根据模板就可以自动生成了类文件了,这样多好,心动不如行动。记得使用T4模板还是2年前,那个时候听波波老师讲课做我们的最后一个大项目CRM,简简单单的写了一下模板,保存一下,所有的类文件就出来了,当时那个膜拜,油然而生。同时在工作中,我们公司自己开发的一个ORM,实体类都要自己写,一个数据库表的字段太多,写的真是手抽筋。如果你对T4基础语法不是很了解,可以参考我前面写的一篇文章T4语法快速入门。回到顶部
2、原理我们要做的事情是通过数据库表生成实体类。第一步我们要查询出当前用户下的所有数据库表。第二步查询出数据库表的结构,比如字段的名称,字段的类型,字段的长度大小,是否为空等等。工作中oracle用的比较多,在这里我就分析oracle和mssql回到顶部3.oracle查询当前用户所有的表。SELECTTABLE_NAMEFROMUSER_TABLES;根据表名查询表结构数据复制代码SELECTA.column_name字段名,A.data_type数据类型,A.data_length长度,A.data_precision整数位,A.Data_Scale小数位,A.nullable允许空值,Dat
3、a_default缺省值,comments备注,A.TABLE_NAME表名FROMuser_tab_columnsA,user_col_commentsBWHEREa.COLUMN_NAME=b.column_nameANDA.Table_Name=B.Table_NameANDA.Table_Name=AFFIXINFO复制代码ModelAuto.ttinclude来源与网上,作用是生成一个一个单独的类文件,即xx.cs文件。ModelAuto.ttinclude复制代码#ModelManagermanager=newModelManager();Listlist=manager.GetT
4、ableList();#usingSystem;usingSystem.Data;usingSystem.Data.OracleClient;namespaceModel/数据表实体类:/Serializable()publicclassIIIIIIIIIpublic(get;set;#+publicclassModelManager(IIIIII数据库连接字符串IIIprivateconststringCONNECTION_STRING=DataSource=orcl;PersistSecurityInfo=True;UserID=jjmis;Password=jjmis;Unicode=T
5、rue;IIIIII用户信息表名IIIprivateconststringPERSONINFO_TABLE_NAME=USERINFO;IIIIII根据表名查询表结构信息IIIprivateconststringSELECT_SCHEMA_BY_TABLE_NAMESELECTA.column_name字段名,A.data_type数据类型,A.data_length长度,A.data_precision整数位,A.DataScale小数位,A.nullable允许空值,A.Data_default缺省值,.comments备注,A.TABLE_NAME表名FROMuser_tab_colum
6、nsA,user_col_commentsBWHEREa.COLUMN_NAME=b.column_nameANDA.Table_Name=B.Table_NameANDA.Table_Name=0;/获得数据连接/privateOracleConnectionGetConnection()returnnewOracleConnection(CONNECTION_STRING);/得到当前用户的所有表名/publicListGetTableList()stringsql=SELECT*FROMUSER_TABLES”;DataTabledt=OracleHelper.ExecuteDataTa
7、ble(sql);Listlist=newList();if(dt!=null&dt.Rows.Count0)for(inti=0;idt.Rows.Count;i+)list.Add(dt.RowsiTABLE_NAME.ToString();returnlist;IIIIII释放连接IIIIIIprivatevoidReleaseConnection(OracleConnectioncon)(if(con!=null)(if(con.State=ConnectionState.Open)(con.Close();publicDataTableGetTableSchema(stringtab
8、leName)(DataTabledt;using(OracleConnectioncon=GetConnection()(con.Open();OracleCommandcmd=con.CreateCommand();cmd.CommandTextstring.Format(SELECT_SCHEMA_BY_TABLE_NAME,tableName);cmd.CommandType=CommandType.Text;OracleDataAdapteradapter=newOracleDataAdapter(cmd);DataSetds=newDataSet();adapter.Fill(ds
9、);dt=ds.Tables0;returndt;IIIIIISQL不完善,需要的自己改造IIIIIIIIIpublicstringTransFromSqlType(stringtype)(if(string.IsNullOrEmpty(type)returnstring.Empty;if(string.Equals(type,number,StringComparison.OrdinalIgnoreCase)(returnint;if(string.Equals(type,date,StringComparison.OrdinalIgnoreCase)(returnDateTime;else
10、if(string.Equals(type,nvarchar2”,StringComparison.OrdinalIgnoreCase)(returnstring;returnstring;#复制代码保存此模板文件就可以生成下面类文件。回到顶部4.Mssql查询数据库表stringconnectionString=DataSource=.;InitialCatalog=NFineBase;UserID=sa;Password=hjf19870810;”;SqlConnectionconn=newSqlConnection(connectionString);conn.Open();System
11、.Data.DataTableschema=conn.GetSchema(TABLES);通过数据库表查询表结构SELECT名=,字段名=,字段说明=sprop.valueFROMsyscolumnsasscolinnerjoinsys.sysobjectsassobjonscol.id=sobj.idandsobj.xtype=Udtpropertiesleftjoinsys.extended_propertiesassproponscol.id=sprop.major_idandscol.colid=sprop.minor_idw
12、=tableN=columnName同样我们要生成多个类文件,需要引入ModelAuto.ttincludeModelTemplate.tt文件如下复制代码#stringconnectionString=DataSource=.;InitialCatalog=NFineBase;UserID=sa;Password=hjf19870810;”;SqlConnectionconn=newSqlConnection(connectionString);conn.Open();System.Data.DataTableschema=conn.G
13、etSchema(TABLES);stringselectQuery=select*fromtableName;SqlCommandcommand=newSqlCommand(selectQuery,conn);SqlDAdapterad=newSqlDataAdapter(command);System.Data.DataSetds=newDataSet();stringpropQuery=SELECT表名=,字段名=,字段说明=sprop.valueFROMsyscolumnsasscolinnerjoinsys.sysobjectsassobjonscol.id=sobj.idandsobj.xtype=Udtpropertiesleftjoinsys.extended_propertiesassproponscol.id=sprop.major_idandscol.colid=sprop.minor_=tableN=columnName;SqlCommandcomm
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论