《模板根据生成实体类模板》由会员分享,可在线阅读,更多相关《模板根据生成实体类模板(9页珍藏版)》请在金锄头文库上搜索。
1、T4模板根据DB生成实体类阅读目录1.前言2.原理3.oracle 4.Mssql1.前言为什么会有这篇文章了,最近看到了一些框架,里面要写的代码太多了,故此就想偷懒,要是能写出一个T4模板,在数据库添加表后,根据模板就可以自动生成了类文件了,这样多好,心动不如行动。记得使用T4模板还是2年前,那个时候听波波老师讲课做我们的最后一个大项目CRM,简简单单的写了一下模板,保存一下,所有的类文件就出来了,当时那个膜拜,油然而生。 同时在工作中,我们公司自己开发的一个ORM,实体类都要自己写,一个数据库表的字段太多,写的真是手抽筋。如果你对T4基础语法不是很了解,可以参考我前面写的一篇文章 T4语法
2、快速入门。回到顶部2.原理我们要做的事情是通过数据库表生成实体类。第一步 我们要查询出当前用户下的所有数据库表。第二步 查询出数据库表的结构,比如字段的名称,字段的类型,字段的长度大小,是否为空等等。工作中oracle用的比较多,在这里我就分析oracle和mssql回到顶部3.oracle查询当前用户所有的表。SELECT TABLE_NAME FROM USER_TABLES;根据表名查询表结构数据复制代码SELECT A.column_name 字段名, A.data_type 数据类型,A.data_length 长度,A.data_precision 整数位,A.Data_Scale
3、 小数位,A.nullable 允许空值,A.Data_default 缺省值,B.comments 备注,A.TABLE_NAME 表名FROM user_tab_columns A, user_col_comments BWHERE a.COLUMN_NAME = b.column_nameAND A.Table_Name = B.Table_NameAND A.Table_Name = AFFIXINFO复制代码 ModelAuto.ttinclude来源与网上,作用是生成一个一个单独的类文件,即xx.cs文件。 ModelAuto.ttinclude复制代码# ModelManager
4、 manager = new ModelManager();List list=manager.GetTableList();# using System;using System.Data;using System.Data.OracleClient;namespace Model / / 数据表实体类: / Serializable() public class / / / public get; set; #+ public class ModelManager / / 数据库连接字符串 / private const string CONNECTION_STRING = Data So
5、urce=orcl;Persist Security Info=True;User ID=jjmis;Password=jjmis;Unicode=True; / / 用户信息表名 / private const string PERSONINFO_TABLE_NAME = USERINFO; / / 根据表名查询表结构信息 / private const string SELECT_SCHEMA_BY_TABLE_NAME = SELECT A.column_name 字段名, A.data_type 数据类型, A.data_length 长度, A.data_precision 整数位,
6、 A.Data_Scale 小数位, A.nullable 允许空值, A.Data_default 缺省值, B.comments 备注, A.TABLE_NAME 表名 FROM user_tab_columns A, user_col_comments B WHERE a.COLUMN_NAME = b.column_name AND A.Table_Name = B.Table_Name AND A.Table_Name = 0; / / 获得数据连接 / / private OracleConnection GetConnection() return new OracleConnection(CONNECTION_STRING); / / 得到当前用户的所有表名 / / public List GetTableList() string sql = SELECT * FROM USER_TABLES; DataTable dt = OracleHelper.ExecuteDataTable(sql); List list = new List(); if (dt!=null&dt.Rows.Count0) for (int i = 0; i dt.Rows.Cou