C# T4 模板 数据库实体类生成模板(带注释,娱乐用)
参考教程
1、http://www.cnblogs.com/zhongxinWang/p/3540283.html //批量生成文件
2、http://www.jb51.net/article/34530.htm //获取表或者字段的扩展属性
1、先把Manager.ttinclude添加到工程里http://www.cnblogs.com/zengxiangzhan/p/3250105.html
2、添加空白文件 文本模板(.tt) 到工程里,将以下代码添加到工程里,改成你想要的数据库连接语句,然后运行,就会有实体类了,简单暴力的写法,我的主要目的主要是注释。。。,哈,格式不对自己调
,到时候会多一个文件,就是空白文件的cs文件,删掉就完了。<#@ template language="C#" debug="True" hostspecific="True" #>
<#@ output extension=".cs" #>
<#@ assembly name="System.Data" #>
<#@ assembly name="System.xml" #>
<#@ assembly name="System.Core"#>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Data.SqlClient" #>
<#@ import namespace="System.Data" #>
<#@ import namespace="System.Linq"#>
<#@include file="$(ProjectDir)\Manager.ttinclude"#>
<# var manager = Manager.Create(Host, GenerationEnvironment); #>
<# manager.StartHeader(); #>
/****************************根据数据库连接生成数据库实体类生成工具,只适合.net 4.0及以上***********************
SELECT value FROM ::fn_listextendedproperty(NULL, 'user', 'dbo', 'table','{0}', {1}, DEFAULT) WHERE name='MS_Description'
{0} : 表名
{1} :
1、DEFAULT作为参数
查询表的扩展属性MS_Description
作为每一个实体类的备注
2、 'column'作为参数
且完整语句如
SELECT value FROM ::fn_listextendedproperty(NULL, 'user', 'dbo', 'table','{0}',DEFAULT, DEFAULT) WHERE name='MS_Description' and objname='{1}'
时,
{0} :表名
{1} :字段名
查询的是某个表的字段名的扩展属性MS_Description
注意:数据库的字段字段名是什么样子,属性名,就是什么样子,所以请一定要有命名规范
*/
using System;
namespace DataComandEntity
{
<# manager.EndBlock(); #>
<#
//数据库连接语句
string ConnectionStr="Data Source=******;Initial Catalog=MeterIndex;Persist Security Info=True;User ID=****;Password=****;pooling=true"; SqlConnection conn = new SqlConnection(ConnectionStr); conn.Open(); System.Data.DataTable schema = conn.GetSchema("TABLES"); //获取数据库架构信息 string selectQuery = "select * from @tableName"; //正确的,后面会用Replace替换 SqlCommand command = new SqlCommand(selectQuery,conn); SqlDataAdapter sda = new SqlDataAdapter(command); System.Data.DataSet ds = new DataSet(); foreach(System.Data.DataRow row in schema.Rows)
{
String strModel="SELECT value FROM ::fn_listextendedproperty(NULL, 'user', 'dbo', 'table','{0}', {1}, DEFAULT) WHERE name='MS_Description'"; //SQL语句模版
String TABLE_NAME=row["TABLE_NAME"].ToString(); //获取表名 manager.StartNewFile(TABLE_NAME+".cs");
//获取表的扩展属性
using(SqlConnection connT1=new SqlConnection(conn.ConnectionString)){
connT1.Open();
using(SqlCommand cmd=new SqlCommand(string.Format(strModel,TABLE_NAME,"DEFAULT"),connT1)){
using(SqlDataReader sdr=cmd.ExecuteReader()){
if(sdr.HasRows){ //如果有结果
sdr.Read();
#>
/// <summary>
/// <#=sdr[0].ToString().Trim()#>
/// </summary>
<#
}
}
}
}
#>
public class <#=TABLE_NAME #>
{
<#
ds.Tables.Clear(); command.CommandText = selectQuery.Replace("@tableName",row["TABLE_NAME"].ToString()); sda.FillSchema(ds, SchemaType.Mapped, row["TABLE_NAME"].ToString()); foreach (DataColumn dc in ds.Tables[].Columns) //遍历列名
{
String COLUMN_NAME=dc.ColumnName.Trim();
using(SqlConnection connT2=new SqlConnection(conn.ConnectionString)){
connT2.Open();
using(SqlCommand cmd2=new SqlCommand()){
//拼接语句
cmd2.CommandText=string.Format(strModel,TABLE_NAME,"'column'")+string.Format(" and objname='{0}'",COLUMN_NAME);
cmd2.Connection=connT2;
using(SqlDataReader sdr2=cmd2.ExecuteReader()){
if(sdr2.HasRows){
sdr2.Read();
#>
/// <summary>
/// <#=sdr2[0].ToString().Trim()#>
/// </summary>
<#
}
}
}
}
#>
public <#= dc.DataType.Name #> <#= COLUMN_NAME #> { get; set; }
<#
}
#>
}
<#
manager.EndBlock();
}
#>
<# manager.StartFooter(); #>
}
<# manager.EndBlock(); #>
<# manager.Process(true); #>
C# T4 模板 数据库实体类生成模板(带注释,娱乐用)的更多相关文章
- T4教程2 T4模版引擎之生成数据库实体类
T4模版引擎之生成数据库实体类 在通过T4模版引擎之基础入门 对T4有了初步印象后,我们开始实战篇.T4模板引擎可以当做一个代码生成器,代码生成器的职责当然是用来生成代码(这不是废话吗).而这其中 ...
- [转]T4模版引擎之生成数据库实体类
本文转自:http://www.cnblogs.com/lzrabbit/archive/2012/07/18/2597953.html 在通过T4模版引擎之基础入门 对T4有了初步印象后,我们开始实 ...
- T4模版引擎之生成数据库实体类
在通过T4模版引擎之基础入门 对T4有了初步印象后,我们开始实战篇.T4模板引擎可以当做一个代码生成器,代码生成器的职责当然是用来生成代码(这不是废话吗).而这其中我们使用的最普遍的是根据数据库生成实 ...
- 【EF框架】EF DBFirst 快速生成数据库实体类 Database1.tt
现有如下需求,数据库表快速映射到数据库实体类 VS给出的两个选择都有问题,并不能实现,都是坑啊 EF .x DbContext 生成器 EF .x DbContext 生成器 测试结果如下 生成文件 ...
- [开源] FreeSql.AdminLTE.Tools 根据实体类生成后台管理代码
前言 FreeSql 发布至今已经有9个月,功能渐渐完善,自身的生态也逐步形成,早在几个月前写过一篇文章<ORM 开发环境之利器:MVC 中间件 FreeSql.AdminLTE>,您可以 ...
- linq to sql 项目移植后,数据库实体类需要重新创建?
项目中,使用LINQ to SQL 访问数据库,代码移植到其他机器上,每次需要重新生成dbml文件,有无方法只要更改app.config呢? 经过试验是可行的: 1.引用system.configur ...
- 【干货分享】C# 实体类生成工具
前言: 项目实战中不论是业务编码还是通用编码,总会归纳出一些通用的工具类.放入项目中一劳永逸,让兄弟姐妹们避免编写重复代码.所以利用了工作之余的时间,将这些散落在多个项目中精致优雅的工具类,归纳起来形 ...
- EF:根据实体类生成表结构SQL
根据实体类生成表结构SQL: PM> Enable-Migrations -ProjectName Domain -StartUpProjectName Handler -Force PM> ...
- C#实体类生成XML与XML Schema文档
一.实体类生成XML private void CreateXML() { Type[] objType = DBEntityRegst(); foreach (var item in objType ...
随机推荐
- 开源)嗨,Java,你可以生成金山词霸的二维码分享海报吗?
As long as you can still grab a breath, you fight.只要一息尚存,就不得不战. 有那么一段时间,我特别迷恋金山词霸的每日一句分享海报.因为不仅海报上的图 ...
- [区块链] 密码学——Merkle 树
在计算机领域,Merkle树大多用来进行完整性验证处理.在处理完整性验证的应用场景中,特别是在分布式环境下进行这样的验证时,Merkle树会大大减少数据的传输量以及计算的复杂度. Merkle哈希树是 ...
- python接口自动化(八)--发送post请求的接口(详解)
简介 上篇介绍完发送get请求的接口,大家必然联想到发送post请求的接口也不会太难,被聪明的你又猜到了.答案是对的,虽然发送post请求的参考例子很简单,但是实际遇到的情况却是很复杂的,因为所有系统 ...
- java游戏开发杂谈 - 游戏编程浅析
每个游戏,你所看到的它的一切,都是计算机画出来的! 地图是画出来,人物是画出来的,树木建筑是画出来的,菜单按钮是画出来的,滚动的文字.闪烁的图标.云雾烟火,都是画出来的. 游戏编程,所要做的,就是控制 ...
- 【原】javascript笔记之Array方法forEach&map&filter&some&every&reduce&reduceRight
做前端有多年了,看过不少技术文章,学了新的技术,但更新迭代快的大前端,庞大的知识库,很多学过就忘记了,特别在项目紧急的条件下,哪怕心中隐隐约约有学过一个方法,但会下意识的使用旧的方法去解决,多年前ES ...
- eureka服务搭建
Server端 引入eureka server的maven依赖 引入依赖时无需给定eureka的版本号,maven会根据当前使用的SpringCloud版本来判断应该引入哪个版本的euraka ser ...
- 接口以及 LeetCode 每日一题
1 接口 1.1 接口的概念 接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部状态数据,也不关心类内方法的实现细节,只是规定这批类里面必须提供某些方法.所以接口体现的是规范和实现分离的设计哲 ...
- Android之Material Dialogs详解
文章大纲 一.什么是Material Dialogs二.Material Dialogs实战三.项目源码下载 一.什么是Material Dialogs Material Dialogs是一个 ...
- 工程实践:给函数取一个"好"的名字
工程实践:给函数取一个"好"的名字 早在2013年,国外有个程序员做了一个有意思的投票统计(原始链接请见:<程序员:你认为最难做的事情是什么?>),该投票是让程序员从以 ...
- render与vue组件和注册
<template> <div class="about"> <h1>This is an about page</h1> < ...