版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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 OracleConne
7、ction(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.Count; i+) list.Add(dt.RowsiTABLE_NAME.ToString(); return
8、 list; / / 释放连接 / / private void ReleaseConnection(OracleConnection con) if (con != null) if (con.State = ConnectionState.Open) con.Close(); public DataTable GetTableSchema(string tableName) DataTable dt; using (OracleConnection con = GetConnection() con.Open(); OracleCommand cmd = con.CreateCommand
9、(); cmd.CommandText = string.Format(SELECT_SCHEMA_BY_TABLE_NAME,tableName); cmd.CommandType = CommandType.Text; OracleDataAdapter adapter = new OracleDataAdapter(cmd); DataSet ds = new DataSet(); adapter.Fill(ds); dt = ds.Tables0; return dt; / / SQL不完善,需要的自己改造 / / / public string TransFromSqlType(st
10、ring type) if (string.IsNullOrEmpty(type) return string.Empty; if (string.Equals(type, number, StringComparison.OrdinalIgnoreCase) return int; if (string.Equals(type, date, StringComparison.OrdinalIgnoreCase) return DateTime; else if (string.Equals(type, nvarchar2, StringComparison.OrdinalIgnoreCase
11、) return string; return string; #复制代码 保存此模板文件就可以生成下面类文件。回到顶部 4.Mssql查询数据库表 string connectionString = Data Source=.;Initial Catalog=NFineBase;User ID=sa;Password=hjf19870810; SqlConnection conn = new SqlConnection(connectionString); conn.Open(); System.Data.DataTable schema = conn.GetSchema(TABLES);
12、通过数据库表查询表结构SELECT 表名=,字段名=,字段说明=sprop.value FROM syscolumns as scol inner join sys.sysobjects as sobj on scol.id=sobj.id and sobj.xtype=U and dtproperties left join sys.extended_properties as sprop on scol.id=sprop.major_id and scol.colid=sprop.minor_id where =tab
13、leName and =columnName同样我们要生成多个类文件,需要引入 ModelAuto.ttincludeModelTemplate.tt文件如下复制代码# string connectionString = Data Source=.;Initial Catalog=NFineBase;User ID=sa;Password=hjf19870810; SqlConnection conn = new SqlConnection(connectionString); conn.Open(); System.Data.DataTable schema = conn.
14、GetSchema(TABLES); string selectQuery = select * from tableName; SqlCommand command = new SqlCommand(selectQuery,conn); SqlDAdapter ad = new SqlDataAdapter(command); System.Data.DataSet ds = new DataSet(); string propQuery = SELECT 表名=,字段名=,字段说明=sprop.value FROM syscolumns as scol inner join sys.sysobjects as sobj on scol.id=sobj.id and sobj.xtype=U and dtproperties left join sys.extended_properties as sprop on scol.id=sprop.major_id and scol.colid=sprop.minor_id where =tableName and =columnName; SqlCommand command2 = new SqlComma
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中AI课程中迁移学习技术对不同文化背景学生的适用性研究课题报告教学研究课题报告
- 民歌新视界 双重新课标视域下小学四年级音乐《山丹丹开花红艳艳》深度教学设计
- 初中音乐七年级下册《一二三四歌》核心素养导向教学设计 -2
- 核心素养导向下初中道德与法治九年级“实施科教兴国战略”议题式教学设计
- 初中英语七年级下册Unit 2 Neighbourhood单元整体教学设计(译林版2024)
- 2026双鸭山宝清县教育系统公开招聘教师30人备考题库附答案详解(能力提升)
- 2026中国东方航空远航飞行人才招聘备考题库附答案详解(a卷)
- 2026年度随州广水市事业单位公开招聘“三支一扶”期满高校毕业生14人备考题库附答案详解(黄金题型)
- 2026海南海口市琼山区赴高校面向2026年应届毕业生招聘教师84人备考题库(一)附答案详解(能力提升)
- 小学体育三年级立定跳远教学设计
- 2026年全国英语b级考试试题及答案
- 行为规范教育:文明礼仪从我做起小学主题班会课件
- 2025年全国计算机一级WPSOffice考试模拟试题及答案
- 人教版高二下学期第一次月考化学试卷(带答案与解析)
- 药液外渗工作制度
- GB/T 2297-2025太阳光伏能源系统术语
- 2026北森测评试题及答案
- 无人机基础知识课件教案
- 华为公司管理制度规范
- 2025年重庆辅警笔试及答案
- 广安市四川广安区恒升镇人民政府选用1名片区纪检监督员笔试历年参考题库典型考点附带答案详解(3卷合一)试卷2套
评论
0/150
提交评论