生成单实体模板:

<%@ 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单表生成实体模板与生成多表实体模板的更多相关文章

  1. PetaPoco T4模板修改生成实体

    PetaPoco T4 模板生成的实体类全部包含再一个.CS文件中.通过修改PetaPoco的T4模板,生成单文件实体. 1.生成单CS文件模板: SigleFile.ttinclude <#@ ...

  2. T4 模板自动生成带注释的实体类文件 - 只需要一个 SqlSugar.dll

    生成实体就是这么简单,只要建一个T4文件和 文件夹里面放一个DLL. 使用T4模板教程 步骤1 创建T4模板 ,一定要自已新建,把T4代码复制进去,好多人因为用我现成的T4报错(原因不明) 点击添加文 ...

  3. T4 模板自动生成带注释的实体类文件

    T4 模板自动生成带注释的实体类文件 - 只需要一个 SqlSugar.dll 生成实体就是这么简单,只要建一个T4文件和 文件夹里面放一个DLL. 使用T4模板教程 步骤1 创建T4模板 如果你没有 ...

  4. java动态生成带下拉框的Excel导入模板

    在实际开发中,由于业务需要,常常需要进行Excel导入导出操作.以前做一些简单的导入时,先准备一个模板,再进行导入,单有十几. 二十几个导入模板时,往往要做十几.二十几个模板.而且,当在模板中需要有下 ...

  5. 使用freemarker模板引擎生成word文档的开发步骤

    1.准备模板文档,如果word文档中有表格,只保留表头和第一行数据:2.定义变量,将word文档中的变量用${var_name}替换:3.生成xml文件,将替换变量符后的word文档另存为xml文件: ...

  6. JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(四):自定义T4模板快速生成页面

    前言:上篇介绍了下ko增删改查的封装,确实节省了大量的js代码.博主是一个喜欢偷懒的人,总觉得这些基础的增删改查效果能不能通过一个什么工具直接生成页面效果,啥代码都不用写了,那该多爽.于是研究了下T4 ...

  7. GZFramwork数据库层《二》单据表增删改查(自动生成单据号码)

    运行效果: 使用代码生成器(GZCodeGenerate)生成tb_EmpLeave的Model 生成器源代码下载地址: https://github.com/GarsonZhang/GZCodeGe ...

  8. MySQL分库分表环境下全局ID生成方案 转

    在大型互联网应用中,随着用户数的增加,为了提高应用的性能,我们经常需要对数据库进行分库分表操作.在单表时代,我们可以完全依赖于数据库的自增ID来唯一标识一个用户或数据对象.但是当我们对数据库进行了分库 ...

  9. MySQL分库分表环境下全局ID生成方案

    在大型互联网应用中,随着用户数的增加,为了提高应用的性能,我们经常需要对数据库进行分库分表操作.在单表时代,我们可以完全依赖于数据库的自增ID来唯一标识一个用户或数据对象.但是当我们对数据库进行了分库 ...

随机推荐

  1. [转]xxx.hbm.xml文件配置详解

    潜龙写 xml代码: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibe ...

  2. [转][Navicat for MySQL系列]Navicat如何使用(二)

    上一篇经验已经建立了数据连接,这篇我介绍一下Navicat for MySQL的“增删改查”功能是如何操作的. 工具/原料 Navicat for MySQL 10.1.7 数据库操作(基本) 1 远 ...

  3. [典型漏洞分享]YS忘记密码机制设计存在缺陷,导致任意用户口令均可被修改【高】

    记录了安全测试过程中发现的一些典型的安全问题 YS忘记密码机制存在缺陷,可导致任意用户口令被修改[高] 问题描述: YS网站提供用户密码修改功能,当用户忘记密码时可通过该功能找回密码,但该修改密码的流 ...

  4. Arch linux

    这里将介绍Arch Linux使用问题的解决方法,在这里拿出来和大家分享一下Linux目前较适用于小型的网络,Arch Linux 是个针对 i686i686/x86-64 优化的 Linux 发行版 ...

  5. [Android Pro] Android学习——在线查看android源代码的3种方式

    原文:http://blog.csdn.net/chuekup/article/details/8067075 1. https://github.com/android 2. http://grep ...

  6. 使用神经网络识别手写数字Using neural nets to recognize handwritten digits

    The human visual system is one of the wonders of the world. Consider the following sequence of handw ...

  7. word-wrap,word-break,white-space,text-overflow的区别和用法

    在div中,文本布局经常出现,换行混乱的情况. 问题表现:1.如果是全英文字符串,中间不包含任何符号(包括空格),不自动换行.            2.中英文混写,则在英文字符串的开始处换行(英文长 ...

  8. 数组类型参数传递问题:$.ajax传递数组的traditional参数传递必须true

    数组类型参数传递: 若一个请求中包含多个值,如:(test.action?tid=1&tid=2&tid=3),参数都是同一个,只是指定多个值,这样请求时后台会发生解析错误,应先使用 ...

  9. 配置thinkphp3.2 404页面

    ThinkPHP自身提供了 404 页面的处理机制,我们只需要在控制器 中添加一个 EmptyController.class.php,并且实现以下方法即可,方法如下: <? class  Em ...

  10. Java笔记14:泛型初探

    一.泛型简介 泛型是从Java SE 1.5开始出现的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛 ...