CodeSmith单表生成实体模板与生成多表实体模板
生成单实体模板:
<%@ Template Language="C#" TargetLanguage="C#" %>
<%@ Assembly Name="SchemaExplorer"%>
<%@ Import Namespace="SchemaExplorer"%>
<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema"%> using System;
using System.Collections.Generic;
namespace Model
{
public class <%=GetClassName()%>Entity
{
<%foreach(ColumnSchema column in this.SourceTable.Columns)%>
<%{%>
/// <summary>
///<%=column.Description%>
/// </summary>
public <%=GetCSDataType(column)%> <%=ToPascal(column.Name)%>{get;set;}
<%}%>
}
} <script runat="template">
//Pascal命名法(将首字母大写)
public string ToPascal(string s)
{
return s.Substring(,).ToUpper()+s.Substring();
}
//骆驼命名法(将首字母小写)
public string ToCamel(string s)
{
return s.Substring(,).ToLower()+s.Substring();
}
//得到类的名字(由表名而来)
public string GetClassName()
{
string s=this.SourceTable.Name;//取到表名
//判断表名是不是以S结尾,如果是去掉S
if (s.EndsWith("s"))
{
return ToPascal(s.Substring(,s.Length-));
}
return ToPascal(s);
}
//得到C#的数据类型(将基本常用的数据类型意逐个转换)
public static string GetCSDataType(ColumnSchema column)
{
if (column.Name.EndsWith("TypeCode")) return column.Name;
switch (column.DataType)
{
case DbType.AnsiString: return "string";
case DbType.AnsiStringFixedLength: return "string";
case DbType.Binary: return "byte[]";
case DbType.Boolean: return "bool";
case DbType.Byte: return "byte";
case DbType.Currency: return "decimal";
case DbType.Date: return "DateTime";
case DbType.DateTime: return "DateTime";
case DbType.Decimal: return "decimal";
case DbType.Double: return "double";
case DbType.Guid: return "Guid";
case DbType.Int16: return "short";
case DbType.Int32: return "int";
case DbType.Int64: return "long";
case DbType.Object: return "object";
case DbType.SByte: return "sbyte";
case DbType.Single: return "float";
case DbType.String: return "string";
case DbType.StringFixedLength: return "string";
case DbType.Time: return "TimeSpan";
case DbType.UInt16: return "ushort";
case DbType.UInt32: return "uint";
case DbType.UInt64: return "ulong";
case DbType.VarNumeric: return "decimal";
default:
{
return "__UNKNOWN__" + column.NativeType;
}
}
}
public override string GetFileName()
{
return this.GetClassName()+".cs";
}
</script>
生成多表实体模板:
MultipleTemplate.cst
<%@ CodeTemplate Language="C#" TargetLanguage="Text" Src="" Inherits="" Debug="False" Description="Template description here." %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Import Namespace="SchemaExplorer"%>
<%-- 数据库 --%>
<%@ Property Name="SourceDatabase" type="SchemaExplorer.DatabaseSchema" DeepLoad="True" Optional="False" Category="01. GettingStarted - Required" Description="Database that the tables views, and storedprocedures should be based on. IMPORTANT!!! If SourceTables and SourceViews areleft blank, the Entire Database will then be generated." %>
<%-- 注册实体层Entity模板 --%>
<%@ Register Name="EntityTemplate" Template="Entity.cst" MergeProperties="Flase" ExcludeProperties=""%> <script runat="template">
//解决方案输出路径
private string Directory = String.Empty;
[Editor(typeof(System.Windows.Forms.Design.FolderNameEditor), typeof(System.Drawing.Design.UITypeEditor))]
[Optional, NotChecked]
[DefaultValue("")]
public string OutputDirectory
{
get
{
return Directory;
}
set
{
if (value.EndsWith(@"\"))
value = value.Substring(, value.Length - );
Directory = value;
}
}
</script> <script runat="template">
private void GenerateEntityClasses()
{
Debug.WriteLine("----------------------实体Entity类 生成Start----------------------");
CodeTemplate Template = new EntityTemplate();
foreach(TableSchema table in this.SourceDatabase.Tables)
{
//string filedirectory = outputdirectory +@"\" + table.name + ".cs";
string FileDirectory = this.GetFileDirectory("Model",table.Name,""); //创建Model子文件夹
Template.SetProperty("Table",table);
//文件输出
Template.RenderToFile(FileDirectory,true);
Debug.WriteLine(FileDirectory +" 创建成功.");
}
Debug.WriteLine("----------------------实体Entity类 生成End----------------------");
}
//将字符串首字母转换为大写
private string MakeCamel(string value)
{
return value.Substring(, ).ToUpper() + value.Substring();
} private string GetFileDirectory(string flolderName,string tabName,string surfix)
{
return string.Format("{0}\\{1}\\{2}{3}.cs",OutputDirectory,flolderName,MakeCamel(tabName),surfix);
}
</script>
<%
this.GenerateEntityClasses();
Debug.WriteLine("OK");
%>
Entity.cst
<%@ CodeTemplate Language="C#" Inherits="CodeTemplate" TargetLanguage="Text" Description="NetTiers main template." Debug="True" ResponseEncoding="UTF-8"%>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Import Namespace="SchemaExplorer" %> <%@ Property Name="Table" type="TableSchema" DeepLoad="True" Optional="False" Category="01. Getting Started - Required"Description="Database that the tables views, and stored procedures shouldbe based on. IMPORTANT!!! If SourceTables and SourceViews are left blank, theEntire Database will then be generated." %>
<script runat="template">
//Pascal命名法(将首字母大写)
public string ToPascal(string s)
{
return s.Substring(,).ToUpper()+s.Substring();
}
//骆驼命名法(将首字母小写)
public string ToCamel(string s)
{
return s.Substring(,).ToLower()+s.Substring();
}
//得到类的名字(由表名而来)
public string GetClassName()
{
string s=this.Table.Name;//取到表名
//判断表名是不是以S结尾,如果是去掉S
if (s.EndsWith("s"))
{
return ToPascal(s.Substring(,s.Length-));
}
return ToPascal(s);
}
public string DataType2CSharpType(System.Data.DbType dbType)
{
switch (dbType)
{
case DbType.AnsiString:return "string";
case DbType.AnsiStringFixedLength: return "string";
case DbType.Binary:return "byte[]";
case DbType.Boolean: return "bool";
case DbType.Byte:return "byte";
case DbType.Currency:return "decimal";
case DbType.Date:return "DateTime";
case DbType.DateTime:return "DateTime";
case DbType.DateTime2:return "DateTime";
case DbType.DateTimeOffset:return "DateTime";
case DbType.Decimal:return "decimal";
case DbType.Double:return "double";
case DbType.Guid:return "Guid";
case DbType.Int16:return "short";
case DbType.Int32: return "int";
case DbType.Int64:return "long";
case DbType.Object:return "object";
case DbType.SByte:return "sbyte";
case DbType.Single:return "float";
case DbType.String:return "string";
case DbType.StringFixedLength:return "string";
case DbType.Time:return "DateTime";
case DbType.UInt16: return "ushort";
case DbType.UInt32:return "uint";
case DbType.UInt64:return "ulong";
case DbType.VarNumeric:return "decimal";
case DbType.Xml:return "string";
default:return "object";
}
}
</script>
using System;
using System.Collections.Generic;
using System.Text;
namespace Entity
{
public class <%=GetClassName()%>Entity
{
<% foreach(ColumnSchema col in Table.Columns)
{ %>
/// <summary>
///<%=col.Description%>
/// </summary>
public <%= DataType2CSharpType(col.DataType) %> <%=ToPascal(col.Name) %>{ get;set; }
<% } %>
}
}
很久不用,再用发现不会连接数据库了,又查了下:
编译过后会在属性窗口出现可以设置的属性
SourceTable属性默认为空, 点击右侧的那个三个点按钮,会弹出对话框
点击Data Source右侧的那个两个点按钮
点Add按钮新增一个数据库连接
输入Name,Provider Type选择SqlSchemaProvider,点击Connection String 右侧的三点按钮
输入Server Name,可以选择Windows身份认证或者SQL Server 密码认证,然后选择一个数据库,最后点击OK,接着再点OK,回到选择表界面,下拉框中选择刚加入的数据库,会自动列出该库中的所有表
2、设置SourceTable
先执行
Tools-Build
然后在属性杂项一栏中设置SourceTable
选择数据库,再选择表。
Tools
->generate 生成表实体
CodeSmith单表生成实体模板与生成多表实体模板的更多相关文章
- PetaPoco T4模板修改生成实体
PetaPoco T4 模板生成的实体类全部包含再一个.CS文件中.通过修改PetaPoco的T4模板,生成单文件实体. 1.生成单CS文件模板: SigleFile.ttinclude <#@ ...
- T4 模板自动生成带注释的实体类文件 - 只需要一个 SqlSugar.dll
生成实体就是这么简单,只要建一个T4文件和 文件夹里面放一个DLL. 使用T4模板教程 步骤1 创建T4模板 ,一定要自已新建,把T4代码复制进去,好多人因为用我现成的T4报错(原因不明) 点击添加文 ...
- T4 模板自动生成带注释的实体类文件
T4 模板自动生成带注释的实体类文件 - 只需要一个 SqlSugar.dll 生成实体就是这么简单,只要建一个T4文件和 文件夹里面放一个DLL. 使用T4模板教程 步骤1 创建T4模板 如果你没有 ...
- java动态生成带下拉框的Excel导入模板
在实际开发中,由于业务需要,常常需要进行Excel导入导出操作.以前做一些简单的导入时,先准备一个模板,再进行导入,单有十几. 二十几个导入模板时,往往要做十几.二十几个模板.而且,当在模板中需要有下 ...
- 使用freemarker模板引擎生成word文档的开发步骤
1.准备模板文档,如果word文档中有表格,只保留表头和第一行数据:2.定义变量,将word文档中的变量用${var_name}替换:3.生成xml文件,将替换变量符后的word文档另存为xml文件: ...
- JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(四):自定义T4模板快速生成页面
前言:上篇介绍了下ko增删改查的封装,确实节省了大量的js代码.博主是一个喜欢偷懒的人,总觉得这些基础的增删改查效果能不能通过一个什么工具直接生成页面效果,啥代码都不用写了,那该多爽.于是研究了下T4 ...
- GZFramwork数据库层《二》单据表增删改查(自动生成单据号码)
运行效果: 使用代码生成器(GZCodeGenerate)生成tb_EmpLeave的Model 生成器源代码下载地址: https://github.com/GarsonZhang/GZCodeGe ...
- MySQL分库分表环境下全局ID生成方案 转
在大型互联网应用中,随着用户数的增加,为了提高应用的性能,我们经常需要对数据库进行分库分表操作.在单表时代,我们可以完全依赖于数据库的自增ID来唯一标识一个用户或数据对象.但是当我们对数据库进行了分库 ...
- MySQL分库分表环境下全局ID生成方案
在大型互联网应用中,随着用户数的增加,为了提高应用的性能,我们经常需要对数据库进行分库分表操作.在单表时代,我们可以完全依赖于数据库的自增ID来唯一标识一个用户或数据对象.但是当我们对数据库进行了分库 ...
随机推荐
- Linux下Git命令中文显示乱码的问题解决:274\232\350\256\256\346\200\273\347\273\223
使用git add添加要提交的文件的时候,如果文件名是中文,会显示形如274\232\350\256\256\346\200\273\347\273\223的乱码. 解决方案:在bash提示符下输入: ...
- Hive技术拾遗
1. SELECT语句可以使用正则表达式做列选择,下面的语句查询除了ds和h 之外的所有列:SELECT `(ds|hr)?+.+` FROM sales 2. LEFT SEMI JOIN的限制是, ...
- Shell合并两个文件成一个文件的两列paste,awk
Shell合并两个文件成一个文件的两列 发布时间:2014-07-20 编辑:www.jquerycn.cn Shell合并两个文件成一个文件的两列,提供了两种方法,普通shell脚本,awk脚本 ...
- iOS:键盘弹出和收起的通知使用
介绍:不论是UITextField,还是UITextView,使用它们输入文字时都是有键盘的弹出,此时可能会挡住我们创建的一分部其他视图,此时,就需要根据键盘的高度将我们被隐藏的部分View做向上或者 ...
- java中jar命令打包一个文件夹下的所有文件
(1)首先,必须保证java的所有路径都设置好,在dos提示符下输入jar -help出现C:\Documents and Settings\dly>jar -help非法选项:h用法:jar ...
- 天台人满为患,不如来看下这个Ramnit蠕虫DesktopLayer.exe分析
今年的世界杯越来越看不懂,想去天台吹吹风都不一定有位置,心凉了,事儿还得做,先从网上抓个可疑样本压压惊!上手分析才发现并没有我想得那么简单…… 一.基本信息 MD5 ff5e1f27193ce51ee ...
- DBA数据库信息查询常用SQL
常用DBA脚本1.查看表空间的名称及大小 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size from dba_tabl ...
- 如何打造一款可靠的WAF
之前写了一篇<WAF防御能力评测及工具>,是站在安全运维人员选型WAF产品的角度来考虑的(优先从测试角度考虑是前职业病,毕竟当过3年游戏测试?!).本篇文章从WAF产品研发的角度来YY如何 ...
- Linux系统443端口被占用无法启动解决办法
etstat -ano|findstr "443" //搜索443端口占用情况,并找到进程IDTCP 0.0.0.0:443 0.0.0.0:0 LISTENING ...
- Axure 简单原型设计
简介 Axure RP是一个专业的快速原型设计工具.Axure(发音:Ack-sure),代表美国Axure公司:RP则是Rapid Prototyping(快速原型)的缩写. Axure RP是美国 ...