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来唯一标识一个用户或数据对象.但是当我们对数据库进行了分库 ...
随机推荐
- Matlab读取音频数据
项目需要,读出识别的车牌,对着图片看看是否识别正确. 有了0到9和A到Z,32个省份的音频,但是如何用matlab读出来,老版本有wavread直接读出,然后waveplay读入的即可.但是现在的是a ...
- TSQL语言基础笔记之单表查询
db_id()函数 返回对象的id,如果返回的对象为null,则判断不存在 if db_id('testdb') is null --判断数据库是否存在 create database testdb ...
- Unity3d通用工具类之生成文件的MD5
今天我们来写写工具类,这个类有什么用呢? 也就是无论你做什么项目,这个工具类你都可以拿来用,之所以通用,是可以适用所有项目. 这节我主要讲如何生成文件的MD5码. 那么这个MD5是个什么鬼东西,读者可 ...
- python的globals()使用
使用命令pyrasite-shell pid,可以与进程进行shell交互,获取,在shell里执行globals(),可以获取整个进程的全部全局变量,比如django应用.flask应用的变量,而不 ...
- sudoers文件属性的修改导致sudo命令失效
1.sudoers文件属性为440 -r--r-----. 1 root root 4033 Dec 28 18:57 sudoers 2.如果修改sudoers文件属性,就会导致sudo命令不可用, ...
- 如何编写一个shellcode
ShellCode的编写就是将函数或变量在内存中的间接地址改为函数或变量在内存中的直接地址,直接调用! 以MessageBox函数为例进行讲解如下 新建shellcode.cpp: 编写代码如下: 运 ...
- 用java源代码学数据结构<七>: BST
/* * 以int类为例 * 其它的类必须能够比较 * */ //二叉搜索树的节点点 class BSTNode{ int item; BSTNode lc; BSTNode rc; BSTNode ...
- Android SDK Manager 更新
Android SDK Manager 更新 解决国内访问Google服务器的困难: 1.启动 Android SDK Manager : 2.打开主界面,依次选择「Tools」.「Options…」 ...
- 【ACM】找新朋友
//make up a table of prime factors #include <stdio.h> #include <stdlib.h> #define MAX 32 ...
- Rails 枚举
Rails Model中使用枚举有两种方案,一种是rails内置的enum,一种使用enumerize这个gem,不管哪种都能达到相同的目的. 首先介绍第一种: 一. enum 基本使用方法,以一个案 ...